Amp

leetcode面试题27(二叉树的镜像)--C语言实现

微笑、不失礼 提交于 2020-08-17 21:04:14
求: 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出: 4 / \ 7 2 / \ / \ 9 6 3 1 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 限制: 0 <= 节点个数 <= 1000 注意:本题与主站 226 题相同:https://leetcode-cn.com/problems/invert-binary-tree/ 解: 思路:从根节点开始,分别交换树中每一个节点的左右节点的指针,递归调用完成后得到的树就是原树的镜像翻转树。分别判断根节点为空、根节点不空但左右节点均为空、根节点不空但左右节点有一个为空、根节点不空但左右节点均不为空的情况下,应该怎么操作指针即可。最后返回根节点的指针。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void Mirror( struct TreeNode* root){ if (root==NULL || (root->left==NULL && root->right==NULL))

hive工作常用语句

孤街浪徒 提交于 2020-08-17 20:21:44
hive工作常用语句 1.查看hadoop任务 yarn application -list |grep 用户名 yarn application -kill application_1443009203033_86621 2.liunx nohup命令 nohup ./label_driver.sh > /home/disk4/bi/driver_label/label_driver20150325.log 2>&1 & nohup ./testpass.sh > logs/testpass_20150323.log 2>&1 & 3.hive添加字段 ALTER TABLE label_driver_z add columns(total_miss_cnt int comment '累积爽约订单数'); 4.hive修改表分隔方式、修改空值描述符 ALTER TABLE city SET SERDEPROPERTIES ('field.delim' = '\t'); ALTER TABLE city SET SERDEPROPERTIES('serialization.format' = '\t'); ALTER TABLE city SET SERDEPROPERTIES('serialization.null.format' = ''); ALTER TABLE dm

Milvus数据管理-数据段合并机制

纵饮孤独 提交于 2020-08-17 19:14:19
我们在 《Milvus在大规模向量检索场景下的数据管理》 这篇文章说过,当向量数据不断地进入 Milvus 时,系统后台会持续地将插入缓冲区中的数据写入磁盘,形成很多小文件。 我们称这些文件为数据段 。大量零碎的数据段有两个明显缺点: 不利于元数据管理,对SQLite/MySQL的访问频繁 索引过于分散,影响查询的性能 因此Milvus后台落盘任务会不断地把这些小数据段合并成大数据段,直到合并后的数据段大小超过index_file_size(默认1024MB)这个阈值。 (一)旧版本合并机制的缺点 在0.9.0版本以前,数据段的合并策略是简单粗暴的:先从元数据拿到一批需要被合并的数据段,然后循环遍历合并。如下图所示: 假设拿到7个数据段,从第一个开始合并到第三个,segment_8已经超过1024MB的大小,就停止对segment_8的合并;接着从第四个合并到第六个,合并为segment_9;合并完成后将前六个数据段标记为软删除,最终剩下三个数据段:segment_7,segment_8,segment_9。 这种合并机制有一个很大的缺点:占用过多的磁盘空间。 《Milvus在大规模向量检索场景下的数据管理》这篇文章介绍过,数据段的删除是分为两个阶段的:软删除和硬删除。当数据段被标记为软删除后,并不会立刻从磁盘中清理掉,而是会保留一段时间,直到后台清理线程将其硬删除,才会被清理掉

「从零单排canal 04」 启动模块deployer源码解析

偶尔善良 提交于 2020-08-17 17:08:41
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal 本文将对canal的启动模块deployer进行分析。 Deployer模块(绿色部分)在整个系统中的角色如下图所示,用来启动canal-server. 模块内的类如下: 为了能带着目的看源码,以几个问题开头,带着问题来一起探索deployer模块的源码。 CanalServer启动过程中配置如何加载? CanalServer启动过程中涉及哪些组件? 集群模式的canalServer,是如何实现instance的HA呢? 每个canalServer又是怎么获取admin上的配置变更呢? 1.入口类CanalLauncher 这个类是整个canal-server的入口类。负责配置加载和启动canal-server。 主流程如下: 加载canal.properties的配置内容 根据canal.admin.manager是否为空判断是否是admin控制,如果不是admin控制,就直接根据canal.properties的配置来了 如果是admin控制,使用PlainCanalConfigClient获取远程配置

Mybatis源码之美:2.13.解析databaseIdProvider元素,配置数据库类型唯一标志生成器

梦想的初衷 提交于 2020-08-17 17:00:21
解析databaseIdProvider元素,配置数据库类型唯一标志生成器 mybatis 中定义了一个名为 DatabaseIdProvider 的接口,该接口的作用是获取不同数据源在 mybatis 中的唯一标志。 DatabaseIdProvider 定义了两个方法, setProperties() 方法用于配置自定义属性, getDatabaseId() 方法用于获取指定数据源对应的 databaseId 。 /** * 在需要使用多数据库特性的时候,可以实现该接口来构建自己的DatabaseIdProvider * <p> * @author Eduardo Macarron */ public interface DatabaseIdProvider { // 配置自定义属性 void setProperties(Properties p); /** * 获取指定数据源的databaseId * * @param dataSource 数据源 */ String getDatabaseId(DataSource dataSource) throws SQLException; } 通常来说, setProperties() 方法会在 getDatabaseId() 方法前被调用。 借助于 DatabaseIdProvider 和映射语句中配置的 databaseId

PHP实现一个轻量级容器

时光怂恿深爱的人放手 提交于 2020-08-17 16:55:33
什么是容器 在开发过程中,经常会用到的一个概率就是依赖注入。我们借助依懒注入来解耦代码,选择性的按需加载服务,而这些通常都是借助容器来实现。 容器实现对类的统一管理,并且确保对象实例的唯一性 常用的容器网上有很多,如 PHP-DI 、 YII-DI 等各种实现,通常他们要么大而全,要么高度适配特定业务,与实际需要存在冲突。 出于需要,我们自己造一个轻量级的轮子,为了保持规范,我们基于 PSR-11 来实现。 PSR-11 PSR 是 php-fig 提供的标准建议,虽然不是官方组织,但是得到广泛认可。PSR-11 提供了容器接口。他包含 ContainerInterface 和 两个异常接口,提供使用建议。 /** * Describes the interface of a container that exposes methods to read its entries. */ interface ContainerInterface { /** * Finds an entry of the container by its identifier and returns it. * * @param string $id Identifier of the entry to look for. * * @throws NotFoundExceptionInterface

Linux下使用Curl使用

拥有回忆 提交于 2020-08-17 16:51:56
1、Curl常用命令集: # 调试类 -v, --verbose 输出信息 -q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer -K, --config FILE 指定配置文件 -L, --location 跟踪重定向 (H) # CLI显示设置 -s, --silent Silent模式。不输出任务内容 -S, --show-error 显示错误. 在选项 -s 中,当 curl 出现错误时将显示 -f, --fail 不显示 连接失败时HTTP错误信息 -i, --include 显示 response的header (H/F) -I, --head 仅显示 响应文档头 -l, --list-only 只列出FTP目录的名称 (F) -#, --progress-bar 以进度条 显示传输进度 # 数据传输类 -X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST -H, --header <header> 设定 request里的header 例如 -H "Content-Type: application/json" -e, --referer 设定

Homebrew 安装失败

一曲冷凌霜 提交于 2020-08-17 16:43:11
Homebrew 是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。 安装方法 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 但是会经常提示安装失败,提示 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation 解决办法: 浏览器打开 https://raw.githubusercontent.com/Homebrew/install/master/install ,保存网页的内容于任意路径,并命名为 brew_install.rb (也可直接复制文章下方 brew_install.rb 文件内容 ),进入 brew_install.rb 保存的路径,在终端输入指令 ruby brew_install.rb ruby brew_install.rb 安装也会经常失败,多试几次 brew_install.rb 文件内容 #!/usr/bin/ruby # This script installs to /usr

Springboot增加Layui即时通讯支持

穿精又带淫゛_ 提交于 2020-08-17 16:24:55
1、在pom.xml中增加jar包支持 <!-- 添加 websocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> </dependency> 2、增加websocket配置类 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; /** * describe: websocketConfig * current user Maochao.zhu * current system 2020/5/12 */ @Configuration public class