首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【大厂面试演练】听说你很懂ZooKeeper?那我考考你

每日分享大厂面试演练,感兴趣就关注我吧❤️ 面试官:知道ZooKeeper有什么应用场景 嗯嗯,主要有这几种。 数据发布/订阅。可以用来实现配置中心 命名服务。...每一个服务器是一个节点,可以用来检测到集群中机器的上/下线情况 分布式锁 面试官思考中… 面试官:你挑一个你比较熟悉的场景讲讲 嗯嗯好的,那我讲下分布式锁。...是这样的,ZooKeep的获取锁时会在/exclusive_lock节点下创建节点,如果创建成功则获得锁。如果失败,则客户端会在该节点注册一个节点变更的Watcher监听。...每次读、写请求同样是创建节点,是一个类似于“/shared_lock/Hostname-请求类型-序号”的临时顺序节点。 接着会获取节点列表,同时注册Watcher监听。...面试官思考中… 面试官:你刚刚说到Kafka生产者负载均衡,那消费者负载均衡知道 哦哦说欠了,消费者负载均衡有两方面。 一方面,每一个消费者服务器都会在ZooKeeper创建消费者节点。

12921

Rust FFI 编程 - nix crate

[dependencies] nix = "0.17.0" 用 nix 如何创建一个进程 我们用 nix 库重写 libc 文章中创建一个进程的示例,代码如下: use nix::unistd::...("My parent thread: {}", getppid()); } Err(errno) => { // fork 创建进程失败...; } } } fork/kill示例 熟悉 POSIX 规范的话,其中的fork()函数可以用创建一个新的进程(进程),而kill()函数可以用来向一个或一组进程发送信号...我们知道fork()函数如果执行成功,则向进程返回 0,并将进程的进程 ID 返回给父进程。否则,将向父进程返回 -1,不创建进程,并设置errno来标识错误。...这时在随后的程序中关闭进程kill(child, SIGKILL);,你知道进程 ID 为 -1 时会发生什么

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

Maven详解(八)------ 继承和聚合

解决办法:   将那个 jar 包版本统一提取到 “父" 工程中,在工程中声明依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。 操作步骤:   ①、创建父工程 ?    ...我们可以通过自定义标签,然后在标签里面填写常量,这种方法不仅可以用来管理版本号,还可以用来管理比如设置某种编码等等。  ...我们在用Maven 管理项目的时候,通常为创建多个 Maven 工程,也就是一个项目的多个模块。但是这样分成多个模块了,当我们进行项目打包发布的时候,那么要每一个模块都执行打包操作?...第一步:创建聚合工程(注意聚合工程的打包方式也必须为 pom,通常由 上面所讲的父工程来充当聚合工程) ? 第二步:创建工程:业务层     ①、选择 Maven Module ?      ...第三步:创建工程:表现层和持久层     创建步骤和前面一样,注意表现层打包方式我们要选择 war,因为要发布到 tomcat 容器运行。

1.1K100

动态规划问题之乘积为正数的最长子字符串问题

所以我们沿用一贯的思路,创建数组 f[i]表示:以i位置为结尾的所有数组中乘积为正数的最长子数组的长度  有同学可能会有这样的疑问:为什么创建的数组名是f,不是我们经常使用的dp表呢??...2.状态转移方程 刚刚,我们凭借这做这类题目的经验,创建了数组,接下来,就是我们深挖题目的时候了。 我向大家抛出这样一个问题:f[i]和f[i-1]之间有什么关系?...B.nums[i]<0 这时,我们就需要以下标为i-1元素为结尾的数组乘积为负数,这时,我们的创建的数组f就无法实现这个功能了,因此,我们就需再创建一个g表!!!...g[i]表示:以i为结尾的所有数组中乘积为正数的最大值 然后依据nums[i]>0的逻辑,是不是该推导出公式:f[i]=g[i-1]+1?是这样??我们仔细思考一下,错错错!!"why"?...因为如果g[i-1]=0,意味着:以下标为i-1的元素结尾的所有数组中,乘积都是正数,然后代入我们自己推导出来的公式,得到f[i]=1,但我们一想:这种情况,f[i]应该为零,所以错误就产生了,我们可以用三目表达式解决这个问题

7410

宕机后,Redis如何实现快速恢复?

save:在主线程中执行,会导致阻塞; bgsave:创建一个进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置。...否则,所有写操作都得等到快照完了才能执行,性能一下就降低了。 快照时数据能修改? 在给别人拍照时,一旦对方动了,那么这张照片就拍糊了,我们就需要重拍,所以我们当然希望对方保持不动。...你可能会想到,可以用 bgsave 避免阻塞啊。这里我就要说到一个常见的误区了,避免阻塞和正常处理写操作并不是一回事。...另一方面,bgsave 进程需要通过 fork 操作从主线程创建出来。虽然,进程在创建后不会再阻塞主线程,但是,fork 这个创建过程本身会阻塞主线程,而且主线程的内存越大,阻塞时间越长。...如果频繁 fork 出 bgsave 进程,这就会频繁阻塞主线程了。那么,有什么其他好方法

60220

拒绝加班:巧用前端电子表格中构建公式树

还在为满屏的公式而“内牛满面”?还在为长串的公式解析而发愁? 还在定位错误的公式而苦恼?上班要写代码,加班还要分析这又长又臭的公式。你的发际线还好吗? 本葡萄来拯救你的发际线啦!...这里就可以用到前面说的,利用SpreadJS的计算引擎,把分析交给机器来做,分析完成之后,可以通过SpreadJS自身的形状功能来绘制一个清晰明了的公式树。...不仅快且稳,重要的是可以早点下班,他不香? ok,那我们来看看效果。...其余代码可以简单理解为创建命令的“模板”。...在这个if-else中,如果节点是父节点,则通过连接器型装将节点相连接,如果没有节点则无需连接。在creatNodeTree方法中,定义的节点信息,通过拼接的方式,将节点信息设置在对应的矩形上。

69730

最新一期的马拉松在线互动授课答疑精选

肉眼可见两者是不同的呀 24这样写默认统计的是TRUE?这里能不能加个什么条件让这条命令统计FALSE? 没错,你可以理解成,T是1,F是0,所有的1加起来的长度。第二个问题可以用“!”取反集。...配置gatk它又出来这个错误 参数没写对,你可能是要用等号,gatk也可以用conda安装的。...可以考虑新建一个环境重新安装一遍软件 或者你单独创建个环境给multiqc也不是不行唯一的问题就是每次使用multiqc都要切到特定环境。...63为什么我们的表达矩阵要使用外显这个feature,而不使用gene呢,这样得到的表达矩阵还需要将同一个基因的所有外显的表达量相加,才是同一个基因的表达量吧?...是的,使用外显这个feature,而不使用gene。所以,这样得到的表达矩阵还需要将同一个基因的所有外显的表达量相加,才是同一个基因的表达量,因为默认基因的内含子区域定量是不需要的。

24030

Redis 用的很溜,了解过它用的什么协议

那面试又问了,你知道 AOF 持久化之后的文件是什么格式? 答:好像就是文本文件吧? 好,文本文件,那你知道它有什么规则?或者说,它和 Redis 的协议有什么关系?..../ # 900秒内,如果至少有1个key发生变化,就会自动触发bgsave命令创建快照 save 900 1 # 300秒内,如果至少有10个key发生变化,就会自动触发bgsave命令创建快照...; 4、进程开始进行持久化工作,对现有数据进行完整的快照存储; 5、进程完成操作后,通知父进程; ?...因为bgsave每次运 行都要执行fork操作创建进程,属于重量级操作,频繁执行成本过高。...RESP 协议 Redis客户端与服务端通信,使用 RESP 协议通信,该协议是专门为 Redis 设计的通信协议,但也可以用于其它客户端-服务器通信的场景。

43710

Android为什么不能在线程更新UI

如果不做这个校验,是不是我也可以正常在线程更新UI 但是google为什么要这样去设计呢 ViewRootImp是在onActivityCreated方法后面创建 为什么一定需要checkThread...呢 那为什么不加锁呢 为什么一开始在Activity的onCreate方法中创建一个线程访问UI,程序还是正常能跑起来呢 Android中子线程真的不能更新UI 保证上述条件1成立不就可以避免checkThread...为什么还需要开启消息循坏 使用线程更新UI有实际应用场景 Android为什么不能在线程更新UI? // Android中为什么子线程不能更新UI?...ViewRootImp是在onActivityCreated方法后面创建 // ViewRootImp是在onActivityCreated方法后面创建?...等待垂直同步信号回来之后执行 使用线程更新UI有实际应用场景 // 使用线程更新 UI 有实际应用场景

1.4K20

去面试,竟然问我创建线程有哪几种方式!你这是在怀疑我的智商?

Override public void run() { System.out.println("自己实现的run-1"); } } 面试官:嗯,那除了这两种,还有其他创建线程的方法...这些简单的问题难不倒这哥们,于是他想到了 Java5 之后的Executors,Executors工具类可以用创建线程池。...面试官:你写的两种创建线程的方式,都涉及到了run()方法,你了解过Thread里的run()方法具体是怎么实现的?...亲爱的读者朋友,你们知道为什么?你们可以先思考一下。...其实这个答案很简单,我们来分析一下代码便知:其实是 new 了一个对象(对象)继承了Thread对象(父对象),在对象里重写了父类的run()方法;然后父对象里面扔了个Runnable进去,父对象中的

67510

对线面试官 - 网络面试之进程间的通信

面试官:能简单聊聊进程间的通信方式? 派大星:可以的,主要方式为:管道、命名管道、消息队列、共享内存。 面试官:可以简单介绍一下这些通信方式? 派大星:好的。...首先说一下: 管道(pipe): unix操作系统里面,有一个fork操作,可以创建进程的进程,或者说是复制一个进程完全一样的进程,共享代码空间,但是各自有独立的数据空间,不过进程的数据空间是拷贝父进程的数据空间的...所以可以用命令管道来解决这个问题。 之前的管道是没有名字的,所以必须是有父子关系的进程才可以使用。但是命名管道是有名字的。这个命名管道相当于是有一个名字的文件,是有路径的。...面试官:不错,你知道线程见如何切换?简单聊聊? 派大星:这个了解一些。简单的讲就是一个进程的多个线程间切换的时候就涉及到了上下文切换。

12310

《深入浅出SQL》问答录

给数据库、表和列命名时有什么注意事项? A:创建具有描述性的名称通常有不错的效果。有时候要多用几个单词来命名。所有名称都不能包含空格,所以使用下划线能够让你创建更具描述性的名称。...DATATIME(时间和日期):10:30 a.m. 9/29/2020 如果想查看表的数据结构,可以使DESC语句 DRAP TABLE 语句可以用于丢弃表,谨慎使用!...非关联查询 如果子查询可以独立运行且不会引用外层查询的任何结果,即称为外层查询。 上面都是 有时候最好创建测试数据库来尝试各种查询方式,比较查询运行时间。 联接比查询更有效率。...一般而言,查询必须返回一个值,使用IN是例外情况。 所以说,查询可以放在查询里? A:of couse. 据说使用查询能解决的事情,用联接也可以?是这样? A:不然呢?...如果创建了视图,就不需要重复创建复杂的联接与查询。视图隐藏了查询的复杂性。当SQL其他编程语言结合后,把视图加入程序代码会比加入冗长、复杂、充满联接的查询更简单。

2.9K50

Redis 数据持久化?-----意外宕机如何避免数据丢失

save:在主线程中执行,会导致阻塞; bgsave:创建一个进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置。...你可能会想到,可以用 bgsave 避免阻塞啊。这里我就要说到一个常见的误区了,避免阻塞和正常处理写操作并不是一回事。...那么,快照也适合“连拍”? 可以每秒做一次快照? 对于快照来说,所谓“连拍”就是指连续地做快照。...2,bgsave 进程需要通过 fork 操作从主线程创建出来。虽然,进程在创建后不会再阻塞主线程,但是,fork 这个创建过程本身会阻塞主线程,而且主线程的内存越大,阻塞时间越长。...你觉得,在这个场景下,用 RDB 做持久化有什么风险

2K30

Redis 数据持久化?-----意外宕机如何避免数据丢失

save:在主线程中执行,会导致阻塞; bgsave:创建一个进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置。...你可能会想到,可以用 bgsave 避免阻塞啊。这里我就要说到一个常见的误区了,避免阻塞和正常处理写操作并不是一回事。...那么,快照也适合“连拍”? 可以每秒做一次快照? 对于快照来说,所谓“连拍”就是指连续地做快照。...2,bgsave 进程需要通过 fork 操作从主线程创建出来。虽然,进程在创建后不会再阻塞主线程,但是,fork 这个创建过程本身会阻塞主线程,而且主线程的内存越大,阻塞时间越长。...你觉得,在这个场景下,用 RDB 做持久化有什么风险

1K00

冒泡排序

,克问道 “用肉眼看”,谦弱弱的说了一句 “怎么可以用肉眼看,如果成千上万你也用肉眼看?...咱们算法国以算法著称,就是让一切问题的解决都可以最终化为一个算法,可以用程序写出来”,克严厉地批评道 “那该如何找最大的呢?”...谦想了想,说道:“需要N-1次,因为如果因为N-1个数都排好了,那么最后一个数也就不用排了”,顺便画了一个图演示刚才四个石子的情况 ? 冒泡代码 “那你能把这个过程用代码实现?”...,谦挠了挠头,傻傻地笑了一下,克看了谦一眼,转而在地下飞速地写了短短的几行代码 ? 谦心中暗暗惊叹老师的功力 “这个第一层循环是控制趟数,第二行能具体讲讲?”...2次,第三趟需要比较1次,那一共比较了 3 + 2 + 1 次 那推广到数量为 n 的规模的话,那就需要 (n-1) + (n-2) +...+2+1 次,这不就是一个等差数列,很显然: ?

482100

Android自定义ViewGroup神器-ViewDragHelper

这是官方的解释:在自定义ViewGroup时,ViewDragHelper可以用来拖拽和设置View的位置(在ViewGroup范围内)。另外,还提供了一系列的方法和状态跟踪。...ViewDragHelper简化了很多工作,让我们更加关注“业务”的需求,实现步骤如下: 创建ViewDragHelper实例 处理ViewGroup的触摸事件 ViewDragHelper.Callback...(this, 1.0f, new ViewDragHelper.Callback() {}); 创建需要三个参数,第一个为当前的ViewGroup,第二个为sensitivity,主要用于设置touchSlop...还记得前面我们留下的一个问题? “如果你希望拖拽的View是不可点击的,可以不重写onInterceptTouchEvent方法,后面我们会介绍为什么。”...既然我们找到原因了,有人说:你不能在onInterceptTouchEvent直接返回true

1.3K50

数据存在内存里的格式是什么?

我们可以用数组做一维列表,但有时想操作二维数据,比如电子表格,或屏幕上的像素,那么需要 矩阵(Matrix),可以把矩阵看成数组的数组。...数组大小需要预先定好,链表大小可以动态增减,可以创建一个新节点,通过改变指针值,把新节点插入链表,链表也很容易重新排序,两端缩减,分割,倒序等。...任何节点的直属上层节点,叫"母节点"(parent node)。 这个例子能说明 托马斯·杰斐逊 是 阿龙·伯尔 的父亲?...但你可以随便改,弄成 3个,4个,或更多,甚至节点可以用链表存所有节点。 "树"的一个重要性质是(不管现实中还是数据结构中),"根"到"叶"是 单向 的,如果根连到叶,叶连到根就很奇怪。...如果数据随意连接,包括循环,可以用"图"表示,还记得上集用路连接城市的"图"?这种结构 可以用有多个指针的节点表示,因此没有,根,叶,节点和父节点这些概念。可以随意指向。

1.3K30
领券