导航:首页 > 程序命令 > 半程序员面试分布式锁

半程序员面试分布式锁

发布时间:2023-03-03 17:40:48

A. 程序员经典面试题:并发,容易带来哪些问题

编程对于很多人来说,还是比较好上手的。当你学会了一门语言,可以编写一些程序了,很快就会遇到一道坎,并发编程,单线程下好好跑着的程序,怎么就运行异常了?怎么就得不到期望的结果。在面试中,并发编程也是经常出现,我们今天来讨论一个问题, 并发编程,容易出哪些问题?

相信大家在学习并发编程的时候,都会遇到这样一个经典问题,有一个函数,执行i=i+1,执行1000遍。在单线程的环境下,得到的结果都是预期的1000。如果是两个线程同时运行,那么,得到的结果可能是2000,也有可能小于2000。

这是因为i=i+1不是一个原子操作,我们会获取i的值,然后执行一次加法运算,最后将结果赋值给i。当多个线程执行的时候,获取到的i的值之后,在执行后面的动作之前,另外一个线程已经修改了i,造成最终的结果小于2000。

并发编程的时候,我们往往无法确定多个线程之间的执行顺序,经常我们会出现这样一个错误。我们在一个线程中使用的变量,会在另外一个线程中进行初始化或者赋值。最常见的,便是我们在主线程上创建一个子线程,然后再进行变量的初始化,子线程的执行可能早于父线程,造成程序错误。

为了解决并发问题,我们通常会引入锁、信号、信号量等手段来保证临界区只会被一个线程访问,或者让一个线程等待另外一个线程执行完成。但是,引入锁之后,我们又可能会出现死锁的问题,例如:线程1与线程2都需要抢占AB两把锁,假设线程1先抢占了A锁,线程2抢占了B锁,这个时候,线程1在等待B锁,线程2在等待A锁,就这样,等到海枯石烂,我们称之为死锁。

出现死锁,需要同时满足下面几个条件:1.线程需要对需要的资源进行互斥访问(例如一个线程抢到锁)2.持有并等待(例如一个线程抢到了A锁,然后在等待B锁)3.非抢占(线程抢到了锁之后,不能被其他线程抢到)4.循环等待,线程之前存在一个环路。

那么,如何解决死锁的问题呢?既然出现死锁需要同时满足上面的几个条件,那么,我们只要破坏其中一个条件,就能够避免死锁问题。

今天,我们了解到并发编程带来的问题与解决方案,希望对你在平时的工作或者面试有所帮助。

B. 程序员面试要准备些什么东西

面试前的准备
简历
1. 千万别给自己挖坑
在面试的时候,面试官都会针对简历上技术能力、工作经历、项目经验等提出一些细节上的问题,所以你写下的都些东西必须是真实,并且是非常了解。
2. 要有辨识度
通常一个职位可能收到的简历比较多,很多时候,你的简历甚至根本没被HR看到。那么,怎样让自己的简历脱颖而出呢?首先,简历要有“辨识度”,要让面试官看完这个简历,就很想见见这个人。
3. 面试前最好进行一个“模拟面试”
其实自己在制作简历的时候,就像写程序一样自己是很难发现bug的,因此在面试前最好找朋友、老师或同学帮你来一场“模拟面试”,这样也许会发现一些意想不到的问题。
4. 针对不同的公司要对简历进行微调
比如对方是个做电商。而你恰好做过类似项目,就可以将该部分的项目介绍着重突出以下,比如排列到最前面。
充分准备相关的专业知识
可以在网上收集一些相关的面试题,有时面试官也可能会照着网上的内容来问,所以网上一些比较热门的题目也可以关注一些,然后对照自己的经验组织成自己的语言。
项目经验
项目的研发背景、整体业务流程、开发周期、负责的模块、技术实现细节、技术亮点等。自己做过的每个项目都要整理清楚。
了解热门前沿技术
比如你面试的是 iOS 开发岗位,除了 OC 你还能聊聊最新版本的 Swift;比如现在微信小程序开发又火起来了,你也在关注和学习,甚至能解决面试官的一些问题。了解这些热门的前沿技术绝对会成为你面试时的加分点。

C. 程序员面试问题及答案

程序员面试问题及答案

程序员是从事程序开发、维护的专业人员。我整理的程序员面试问题及答案,希望大家喜欢!

1、两柱香问题

题目:有两柱不均匀的香,每柱香燃烧完需要1个小时,问:怎样用两柱香切出一个15分钟的时间段?这个题的重点就是怎么切。

解答:将甲香的一头点着,将乙香的两头点着,当乙香燃烧完时,说明已经过了半个小时,同时也说明甲香也正好燃烧了一半,此时,将甲香的另一头点着,从此时起到甲香完全烧完,正好15分钟。

2、灯管问题

在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分那个开关控制那一盏灯?

解答:打开一盏灯10分钟,关掉,打开第二盏,进去看看哪盏亮,摸摸哪盏热,热的是第一个打开的开关开的,亮的是第二个开关开的',另一个就是第三个。

3、两位盲人问题

他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小完全相同,而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。 他们每人怎样才能取回黑袜和白袜各两对呢?

答案:每一对分开,一人拿一只,因为袜子不分左右脚的;

4、果冻问题

你有一桶果冻,其中有黄色,绿色,红色三种,闭上眼睛,同时抓取两个果冻。抓取多少个就可以确定你肯定有两个同一颜色的果冻?

答案:2次4个!

5、喝啤酒问题

假如每3个空啤酒瓶可以换一瓶啤酒,某人买了10瓶啤酒,那么他最多可以喝到多少瓶啤酒?

答案:喝完10瓶后用9个空瓶换来3瓶啤酒(喝完后有4个空瓶)喝完这三瓶又可以换到1瓶啤酒(喝完后有2个空瓶),这时他有2个空酒瓶,如果他能向老板先借一个空酒瓶,就凑够了3个空瓶可以换到一瓶啤酒,把这瓶喝完后将空瓶还给老板就可以了。

所以他最多可以喝10+3+1+1=15瓶

6、三人住旅馆

有三个人去住旅馆,住三间房,每一间房$10元,于是他们一共付给老板$30,第二天,老板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人,谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人每人各花了九元,于是三个人一共花了$27,再加上小弟独吞了不$2,总共是$29。可是当初他们三个人一共付出$30那么还有$1呢?

答案:他们所消费的27元里已经包括小弟的2元了,再加退还的3元=30元。这种题一定不要乱了阵脚,根据一条思路做:这30元现在的分布是:老板拿25元,伙计拿2元,三人各拿1元,正好!

7、三筐苹果问题

有三筐水果,一筐装的全是苹果,第二筐装的全是橘子,第三筐是橘子与苹果混在一起。筐上的标签都是骗人的,(就是说筐上的标签都是错的)你的任务是拿出其中一筐,从里面只拿一只水果,然后正确写出三筐水果的标签。

答案:从标着“混合”标签的筐里拿一只水果,就可以知道另外两筐装的是什么水果了。

分析:从混合的拿出一个来,如果是苹果,而贴苹果的筐里有可能是橘子和混合,如果是混合,说明贴橘子的筐里是橘子,不成立(因为前提说了,每个标签都是错的)。所以贴苹果的筐里是橘子,则贴橘子的筐里是混合。

8、汽车加油问题

一辆载油500升的汽车从A开往1000公里外的B,已知汽车每公里耗油量为1升,A处有无穷多的油,其他任何地点都没有油,但该车可以在任何地点存放油以备中转,问从A到B最少需要多少油

解答:严格证明该模型最优比较麻烦,但确实可证,大胆猜想是解题关键。题目可归结为求数列an=500/(2n 1) n=0,1,2,3......的和Sn什么时候大于等于1000,解得n>6当n=6时,S6=977.57,所以第一个中转点离起始位置距离为1000-977.57=22.43公里.所以第一次中转之前共耗油22.43*(2*7 1)=336.50升此后每次中转耗油500升,所以总耗油量为7*500 336.50=3836.50升。

9、两个人猜数问题

教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数, 甲说:“我猜不出”, 乙说:“我猜不出”, 甲说:“我猜到了”, 乙说:“我也猜到了”, 问这两个数是多少?

解答:3和4。设两个数为n1,n2,n1> =n2,甲听到的数为n=n1 n2,乙听到的数为m=n1*n2,证明n1=3,n2=4是唯一解。证明:要证以上命题为真,不妨先证n=7

1)必要性:

i) n> 5 是显然的,因为n <4不可能,n=4或者n=5甲都不可能回答不知道

ii) n> 6 因为如果n=6的话,那么甲虽然不知道(不确定2 4还是3 3)但是无论是2,4还是3,3乙都不可能说不知道(m=8或者m=9的话乙说不知道是没有道理的)

iii) n <8 因为如果n> =8的话,就可以将n分解成 n=4 x 和 n=6 (x-2),那么m可以是4x也可以是6(x-2)而4x=6(x-2)的必要条件是x=6即n=10,那样n又可以分解成8 2,所以总之当n> =8时,n至少可以分解成两种不同的合数之和,这样乙说不知道的时候,甲就没有理由马上说知道。以上证明了必要性。

2)充分性

当n=7时,n可以分解成2 5或3 4

显然2 5不符合题意,舍去,容易判断出3 4符合题意,m=12,证毕

于是得到n=7 m=12 n1=3 n2=4是唯一解。

10、猴子吃香蕉问题

一个小猴子边上有100 根香蕉,它要走过50 米才能到家,每次它最多搬50 根香蕉,每走1 米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

解答:设 小猴从0 走到50, 到A 点时候他可以直接抱香蕉回家了, 可是到A 点时候他至少消耗了3A 的香蕉( 到A, 回0, 到A), 一个限制就是小猴只能抱50 只香蕉, 那么在A 点小猴最多49 只香蕉.100-3A=49, 所以A=17. 这样折腾完到家的时候香蕉剩100-3A-(50-A)=50-2A=16.


;

D. 大厂面试题详解:如何用Redis实现分布式锁

说一道常见面试题:

一个很简单的答案就是去使用 Redission 客户端。Redission 中的锁方案就是 Redis 分布式锁得比较完美的详细方案。

那么,Redission 中的锁方案为什么会比较完美呢?

正好,我用 Redis 做分布式锁经验十分丰富,在实际工作中,也 探索 过许多种使用 Redis 做分布式锁的方案,经过了无数血泪教训。

所以,在谈及 Redission 锁为什么比较完美之前,先给大家看看我曾经使用 Redis 做分布式锁是遇到过的问题。

我曾经用 Redis 做分布式锁是想去解决一个用户抢优惠券的问题。这个业务需求是这样的:当用户领完一张优惠券后,优惠券的数量必须相应减一,如果优惠券抢光了,就不允许用户再抢了。

在实现时,先从数据库中先读出优惠券的数量进行判断,当优惠券大于 0,就进行允许领取优惠券,然后,再将优惠券数量减一后,写回数据库。

当时由于请求数量比较多,所以,我们使用了三台服务器去做分流。

这个时候会出现一个问题:

如果其中一台服务器上的 A 应用获取到了优惠券的数量之后,由于处理相关业务逻辑,未及时更新数据库的优惠券数量;在 A 应用处理业务逻辑的时候,另一台服务器上的 B 应用更新了优惠券数量。那么,等 A 应用去更新数据库中优惠券数量时,就会把 B 应用更新的优惠券数量覆盖掉。

看到这里,可能有人比较奇怪,为什么这里不直接使用 SQL:

原因是这样做,在没有分布式锁的协调下,优惠券数量可能直接会出现负数。因为当前优惠券数量为 1 的时候,如果两个用户通过两台服务器同时发起抢优惠券的请求,都满足优惠券大于 0 每个条件,然后都执行这条 SQL 说了句,结果优惠券数量直接变成 -1 了。

还有人说可以用乐观锁,比如使用如下 SQL:

这种方式就在一定几率下,很可能出现数据一直更新不上,导致长时间重试的情况。

所以,经过综合考虑,我们就采用了 Redis 分布式锁,通过互斥的方式,以防止多个客户端同时更新优惠券数量的方案。

当时,我们首先想到的就是使用 Redis 的 setnx 命令,setnx 命令其实就是 set if not exists 的简写。

当 key 设置值成功后,则返回 1,否则就返回 0。所以,这里 setnx 设置成功可以表示成获取到锁,如果失败,则说明已经有锁,可以被视作获取锁失败。

如果想要释放锁,执行任务 del 指令,把 key 删除即可。

利用这个特性,我们就可以让系统在执行优惠券逻辑之前,先去 Redis 中执行 setnx 指令。再根据指令执行结果,去判断是否获取到锁。如果获取到了,就继续执行业务,执行完再使用 del 指令去释放锁。如果没有获取到,就等待一定时间,重新再去获取锁。

乍一看,这一切没什么问题,使用 setnx 指令确实起到了想要的互斥效果。

但是,这是建立在所有运行环境都是正常的情况下的。一旦运行环境出现了异常,问题就出现了。

想一下,持有锁的应用突然崩溃了,或者所在的服务器宕机了,会出现什么情况?

这会造成死锁——持有锁的应用无法释放锁,其他应用根本也没有机会再去获取锁了。这会造成巨大的线上事故,我们要改进方案,解决这个问题。

怎么解决呢?咱们可以看到,造成死锁的根源是,一旦持有锁的应用出现问题,就不会去释放锁。从这个方向思考,可以在 Redis 上给 key 一个过期时间。

这样的话,即使出现问题,key 也会在一段时间后释放,是不是就解决了这个问题呢?实际上,大家也确实是这么做的。

不过,由于 setnx 这个指令本身无法设置超时时间,所以一般会采用两种办法来做这件事:

1、采用 lua 脚本,在使用 setnx 指令之后,再使用 expire 命令去给 key 设置过期时间。

2、直接使用 set(key,value,NX,EX,timeout) 指令,同时设置锁和超时时间。

以上两种方法,使用哪种方式都可以。

释放锁的脚本两种方式都一样,直接调用 Redis 的 del 指令即可。

到目前为止,我们的锁既起到了互斥效果,又不会因为某些持有锁的系统出现问题,导致死锁了。这样就完美了吗?

假设有这样一种情况,如果一个持有锁的应用,其持有的时间超过了我们设定的超时时间会怎样呢?会出现两种情况:

出现第一种情况比较正常。因为你毕竟执行任务超时了,key 被正常清除也是符合逻辑的。

但是最可怕的是第二种情况,发现设置的 key 还存在。这说明什么?说明当前存在的 key,是另外的应用设置的。

这时候如果持有锁超时的应用调用 del 指令去删除锁时,就会把别人设置的锁误删除,这会直接导致系统业务出现问题。

所以,为了解决这个问题,我们需要继续对 Redis 脚本进行改动……毁灭吧,累了……

首先,我们要让应用在获取锁的时候,去设置一个只有应用自己知道的独一无二的值。

通过这个唯一值,系统在释放锁的时候,就能识别出这锁是不是自己设置的。如果是自己设置的,就释放锁,也就是删除 key;如果不是,则什么都不做。

脚本如下:

或者

这里,ARGV[1] 是一个可传入的参数变量,可以传入唯一值。比如一个只有自己知道的 UUID 的值,或者通过雪球算法,生成只有自己持有的唯一 ID。

释放锁的脚本改成这样:

可以看到,从业务角度,无论如何,我们的分布式锁已经可以满足真正的业务需求了。能互斥,不死锁,不会误删除别人的锁,只有自己上的锁,自己可以释放。

一切都是那么美好!!!

可惜,还有个隐患,我们并未排除。这个隐患就是 Redis 自身。

要知道,lua 脚本都是用在 Redis 的单例上的。一旦 Redis 本身出现了问题,我们的分布式锁就没法用了,分布式锁没法用,对业务的正常运行会造成重大影响,这是我们无法接受的。

所以,我们需要把 Redis 搞成高可用的。一般来讲,解决 Redis 高可用的问题,都是使用主从集群。

但是搞主从集群,又会引入新的问题。主要问题在于,Redis 的主从数据同步有延迟。这种延迟会产生一个边界条件:当主机上的 Redis 已经被人建好了锁,但是锁数据还未同步到从机时,主机宕了。随后,从机提升为主机,此时从机上是没有以前主机设置好的锁数据的——锁丢了……丢了……了……

到这里,终于可以介绍 Redission(开源 Redis 客户端)了,我们来看看它怎么是实现 Redis 分布式锁的。

Redission 实现分布式锁的思想很简单,无论是主从集群还是 Redis Cluster 集群,它会对集群中的每个 Redis,挨个去执行设置 Redis 锁的脚本,也就是集群中的每个 Redis 都会包含设置好的锁数据。

我们通过一个例子来介绍一下。

假设 Redis 集群有 5 台机器,同时根据评估,锁的超时时间设置成 10 秒比较合适。

第 1 步,咱们先算出集群总的等待时间,集群总的等待时间是 5 秒(锁的超时时间 10 秒 / 2)。

第 2 步,用 5 秒除以 5 台机器数量,结果是 1 秒。这个 1 秒是连接每台 Redis 可接受的等待时间。

第 3 步,依次连接 5 台 Redis,并执行 lua 脚本设置锁,然后再做判断:

再额外多说一句,在很多业务逻辑里,其实对锁的超时时间是没有需求的。

比如,凌晨批量执行处理的任务,可能需要分布式锁保证任务不会被重复执行。此时,任务要执行多长时间是不明确的。如果设置分布式锁的超时时间在这里,并没有太大意义。但是,不设置超时时间,又会引发死锁问题。

所以,解决这种问题的通用办法是,每个持有锁的客户端都启动一个后台线程,通过执行特定的 lua 脚本,去不断地刷新 Redis 中的 key 超时时间,使得在任务执行完成前,key 不会被清除掉。

脚本如下:

其中,ARGV[1] 是可传入的参数变量,表示持有锁的系统的唯一值,也就是只有持有锁的客户端才能刷新 key 的超时时间。

到此为止,一个完整的分布式锁才算实现完毕。总结实现方案如下:

这个分布式锁满足如下四个条件:

当然,在 Redission 中的脚本,为了保证锁的可重入,又对 lua 脚本做了一定的修改,现在把完整的 lua 脚本贴在下面。

获取锁的 lua 脚本:

对应的刷新锁超时时间的脚本:

对应的释放锁的脚本:

到现在为止,使用 Redis 作为分布式锁的详细方案就写完了。

我既写了一步一坑的坎坷经历,也写明了各个问题和解决问题的细节,希望大家看完能有所收获。

最后再给大家提个醒,使用 Redis 集群做分布式锁,有一定的争议性,还需要大家在实际用的时候,根据现实情况,做出更好的选择和取舍。

原文 https://www.cnblogs.com/siyuanwai/p/16011836.html

E. 精选程序员面试常问的逻辑题

大家在面试的时候,难免会遇到让人摸不着头脑的逻辑题,这类题目让同学们往往连答案应该回答些什么都摸不清楚,只能和面试官四目相对,非常尴尬。

其实,很多面试的考官,都是从题库随机挑选逻辑题来考验同学们,面试官有时候自己也未必完全摸透这类题目,所以面试的时候不必过于紧张,就算答不出来啊也非常正常。

在我的理解中,这类题目主要还是考大家的思路,至于答案标准与否,其实不是特别重要。

本文总结了面试中我自己面试中遇到的几道非常常见的逻辑题,大家可以作为面试前的突击复习材料。

一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?

三个人

若是两个人,设A、B是黑帽子,第二次关灯就会有人打耳光。原因是A看到B第一次没打耳光,就知道B也一定看到了有带黑帽子的人,可A除了知道B带黑帽子外,其他人都是白帽子,就可推出他自己是带黑帽子的人!同理B也是这么想的,这样第二次熄灯会有两个耳光的声音。

如果是三个人,A,B,C。A第一次没打耳光,因为他看到B,C都是带黑帽子的;而且假设自己带的是白帽子,这样只有BC戴的是黑帽子;按照只有两个人带黑帽子的推论,第二次应该有人打耳光;可第二次却没有...于是他知道B和C一定看到了除BC之外的其他人带了黑帽子,于是他知道BC看到的那个人一定是他,所以第三次有三个人打了自己一个耳光

N个人是黑帽子,就会在第N天,有N个人打自己一个耳光。

一个是两种药片,每种有两个,一个人需要早上吃两种药片各一个,现在这四个药片混在一起了这个人什么方法吃。

把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半

一个5L,一个6L的瓶子,要得到3L的水,问什么方法

6-5=1 1L水放在5L那个瓶里面,然后再装6L水,往5L(里面已经有1L)里面倒,这样就会剩下2L水在6L里面,再把2L水放在5L里面,再装一次,不就可以6L那里到处3L水到5L里面,自己就剩下3L了

一共1000瓶酒,其中一瓶有毒。如果一只老鼠喝了有毒的酒,会在一天之后死亡,那么如果给你一天时间,然你判定哪瓶酒有毒,至少需要几只老鼠?

答案是10只。这个需要使用二进制编码来解决,1000瓶酒至少需要10位二进制数来进行编码。然后取十只杯子分别代表这是个二进制数的十个位,分别将1000瓶酒倒入其编码为1的对应的杯子中。取十个老鼠分别喝十个杯子中的酒,一天之后,就可以根据喝哪些杯子的老鼠死掉来确定出有毒的那瓶酒的编码,从而确定哪瓶酒有毒。其根据就是只有有毒酒的编码对应的毒死老鼠的杯子位置。这个题目就是利用了二进制编码的一些特性。

还有一些其他的题目也使用这些特性,比如使用特殊的位运算,一般使用比较多的位运算就是与、或和异或。
这样,就可以对应到现实生活中的一些为题,比如一个类似的问题原本我们想需要用900多台服务器来解决,经过这样分析后就可以使用10台服务器来解决,大大节约了成本。

再比如,国王有10000桶酒,已知一桶酒有毒,喝了之后一定会在23-24小时内死亡(例如0点喝,会在23-第二天0点这个时间段死亡)。现在国王要在48小时后举办一个宴会,需要用罪犯实验,请问最少几个罪犯。(可以混合酒)

如果是常规利用二进制解题的话,那就需要14个犯人,2^14=16384>10000,但是这样一来死亡时间这个条件就用不到,也不是最优解。

应该利用酒死的时间是固定的,一个罪犯像上面那样可以表示成25种状态,三个罪犯就可以表示25 x 25 x25种状态,超过10000了,所以只需要三个罪犯。

有8个小球,其中七个的重量是相同的,有一个较轻。给你一个天平,问秤几次能找出那个较轻的小球,若天平只能秤两次,又该怎么秤

第一次两边各放随机三个,如果平了,则另外一个是轻的,若不平,还有第二次,拿出那三个轻的,在两边随机放一个,就能测出哪个最轻了。

本体图解参考:

https://blog.csdn.net/hinyunsin/article/details/6632062

已知: 每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有单独的加油机),一箱油可供一架飞机绕地球飞半圈

问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)

分为3架飞机5架次和3架飞机6架次

1. 3架飞机6架次

(上图)ABC 3架同时起飞

(上图)1/8处,C给AB加满油,C返航。此时飞机的油量分别是:A: 3/4, B: 3/4, C: 3/4。此时C分别给A和B加满油,三架飞机当前油量分别是:A: 1, B: 1, C: 1/4。C返回机场。A、B继续向前飞行。

(上图)1/4处,B给A加满油,B返航,A到达1/2处,此时C已经返回机场,三家飞机此时油量分别是:A: 3/4, B: 3/4, C: 0。此时B给A加满油,C加满油,此时三架飞机的油量分别是:A: 1, B: 1/2, C: 1。然后B返回机场,A继续向前飞行。

(上图)当A飞行至半圈位置时,B已经返回机场并且加满了油(假设加油时间为0),此时,B和C沿逆时针方向飞行,三架飞机当前油量分别是:A: 1/2, B: 1, C: 1。A继续向前飞行。

(上图)当A飞行至另外半圈的1/4位置时,三架飞机剩余油量分别是:A: 1/4, B: 3/4, C: 3/4。此时,C给B加满油。此时三架飞机油量分别是:A: 1/4, B: 1, C: 1/2。C返回机场,B和A继续向前飞行。

当A飞行至另外半圈的1/2位置时,C已经返回机场,A和B相遇,此时三架飞机剩余油量分别是:A: 0, B: 3/4, C: 0。B给A加1/4的油,三架飞机剩余油量:A: 1/4, B: 1/2, C: 1。C加满油从机场逆时针飞出,B返回机场,A继续向前飞行。

(上图)当A飞行至另外半圈的3/4位置时,A和C相遇。此时三架飞机的油量分别是:A: 0, B: 1/4, C: 3/4。C给A加1/4的油,此时三架飞机的油量分别是:A: 1/4, B: 1/4, C: 1/2。C掉头返回机场,A和B继续向前飞行。

(上图)三架飞机顺利回到机场!

2. 3飞机5架次

(1)3 架飞机同时从机场出发,飞行八分之一周(A点),各耗油四分之一。此时某架飞机给其余两架补满油,自己返回基地;

(2)另一架飞机和目标机结伴,飞至四分之一周(B点),给目标机补满油,自己返回;

(3)目标机独自飞行半周(C点);

(4)与从基地反向出发的一架飞机相遇,2 机将油平分,飞至最后八分之一处(D点);

(5)与从基地反向出发的另一机相遇,各分四分之一油,返回。

75道程序员面试逻辑题和答案

https://blog.csdn.net/qq_38361726/article/details/79824632

F. 程序员面试如何介绍自己优缺点

程序员面试一直是大家讨论的热门话题。那么程序员面试如何介绍自己优缺点呢?下面是我给大家整理的程序员面试如何介绍自己优缺点,供大家参阅!

程序员面试如何介绍自己优缺点

关于优点:

优点是一个相对好回答的问题,每一个人身上都有很多优点,比如细心、适应能力强、善于学习等等。需要提醒大家的是,要尽可能说一些和工作相关的优点,比如孝顺、体贴之类的就不要说啦,可以讲一些诸如“不满足于现状”之类的话,别把自己夸的太玄乎让面试官觉着你太自大就好。

切记的是,一定要举例子啊同学们。不要和面试官直接了当的回答“我不满足于现状”然后等着他问“比如呢?”,这样就显得太高冷了,要像说故事一样的举出一些不那么泛泛的例子,比如:“对自己的能力总是不满足,会去主动尝试学习一些新的东西。高中的时候英语成绩突出,经常能考到140分以上,但是我并没有满足,利用假期考了雅思,成绩也还不错,虽然不出国,但是当做是对自己的一种挑战,很有成就感。”

是不是感觉有那么一点贱贱的?这类问题本身就是这样,你需要的是准备一个你觉着自己还不错的优点,然后讲一段别太长又让人感觉还算真实的故事,就OK了,不需要多出彩,但至少不要为自己减分就好。

给大家一些回答的比较好的:

1. 给自己定下较高的目标并按部就班的实现(可用高考、考研、留学等经历来说明)

2. 同时具有理性思考又有感性和美学的感受力(可以用为什么选择建筑、交互设计等专业来说明。

可以参考这些答案自己准备一些回答,这个问题是没有标准答案的。

关于缺点:

这是一个比较难回答的问题,答得太浅太泛会让人觉着你不能很好的正视自己的缺点,答得太深太真实又会一不小心踩到雷区说到禁忌。一些求职培训机构给了大家一个看似聪明而又标准化的回答,“追求完美、偏执狂“等等,但是,小鹰想告诉大家的是,这个答案已经在5年前就被用烂了,除非你真的是这样,并且能举出一个极具说服力的例子,否则就不要用了。换位思考,如果你是面试官你会相信追求完美是最大的缺点吗?别以为把优点说成缺点就是最聪明的回答,很多时候会让面试官觉着你油嘴滑舌,是在故意讨巧。那应该如何正确的回答这个问题呢?

首先,要知道哪些是雷区,是一定不能说的缺点,比如:懒、脾气古怪、不喜欢合作等等,这就好比说自己“贪嗔痴”一样,是人性的弱点,但是不能在面试中说啊宝贝。在大雷区下,还有一些小雷区,就是针对特定职业的。如果你应聘的是会计,你就不能说自己不拘小节;如果你应聘销售,就不能说自己缺点是内向、不善言辞;如果你是设计师,不能说自己缺乏创新精神等等。

其次,不要去谈和工作不相关的缺点,比如洁癖、厨艺不好、挑食等等,别笑,真的有人这么回答。但是你觉着面试官花时间面试你是想听你唠家常么?同样不要去谈那些不痛不痒的缺点,比如熬夜会困、不善于理财,这种答案说出来会让觉着不知道接什么好,又浑身痒痒,所以还是不要说了。

第三,不要说那些无法改善的缺点,比如一看书就困、算数必须用计算器,这种缺点本身很正常,要是每个人的缺点都能改善都成完人了,但是在面试里拿出来说就是你的不对了,会让面试官觉着“你的这些顽疾既然得不到改善那我干脆不用你好了”。

所以,到底要怎么回答呢?!

在避免以上几点的前提下,要在说出缺点后谈谈你正在或者即将要如何改进这个缺点。小鹰再重申一下,“优点和缺点“的问题是考察大家的自我认知,如果你最大的缺点是“拖延”,然后你明知道这是你最大的问题又不改,是闹哪样呢?会让面试官觉着你是一个不思进取的人。所以,既然是考察自我认知,对于缺点问题最好的回答,应该是你知道自己的缺点并去改正它的过程,然后讲一个真实又动听的故事,就可以顺利过关了。

一些比较好的回答:

1. 有时候把任务布置给别人,觉着不放心或者达不到自己的要求,会去亲力亲为,所以尽管最后项目完成的不错,但是可能会搞得自己特别疲惫,有时候也会影响到同伴的积极性。所以正在努力改进,会在事情开始前先和同伴统一目标和标准,然后分别执行,最后一起讨论…

2. 喜欢追求细节导致项目/作业未能按期完成。通过时间管理能力改变工作方式,先完成框架再改善细节得以解决…

3. 不知如何拒绝,同事要求帮忙一概揽下,影响自身工作进度。通过多任务处理能力设定优先顺序,以该优先顺序表向求助同事展示自己手上工作,并给其一个自己在何时可以给予帮助的时间估计,让求助人自行决定是否求助,问题解决。

如何面试比较容易成功?

在很多求职者的眼中,面试官 就像野兽看到猎人一样?一提到面试官,我们就像到可怕的主考官和令人绝望的口试。我们又总是把面试想象成为充满敌意的情景,自己是被动的牺牲品,被严厉的陌生考官摆弄来摆弄去。我们还把面试描绘成是世上所有的坏心眼人都聚集在一个陌生城市的一间陌生屋子里,在这间屋子里我们将遭遇到气势汹汹的陌生人向我们提出一些我们根本回答不了的问题。

其实,处理面试这一问题的方法就好比将糖化在茶里一样简单。如果你把这个问题包袱一样带到面试场上去,那你活该受罪,尤其是受罪的部分原因是你事先没有花足够的时间思考、计划并准备你的应试策略和预先排演。因为你是否被录取在你的形象和声誉上,所以在积极思考对策预先排演上线点功夫是值得的。如果你被列入了供最后挑选用的候选人名单,这表示有人已经认为你可能胜任这份工作了,之后你将被约见来?

盘算你是否“合适 ”

检验你的自信程度,是否因为紧张而失态;

看看你是否能成功地推销自己一一以观察你的自控程度和模拟状态下你到底有多少“货”

为什么有的后现任没做什么准备就冒然前往参加面试了?原因可能是多种多样的,可能是因为他们不知道该准备些什么,或者知道该准备些什么却不知道该怎么准备,或者是没有发现做点准备的必要性。所以,在这种情况下,参加面试前的第一步工作,最好事写一封信,确认一下面试的安排,这样显得自己很是老道。

一、准备工作

简单写几句话,陈述面试的意图,并经常提醒自己。准备介绍自己的文字材料 、你的观念信仰、个人简历,以及自己合适这份工作的理由。陈述要实事求是不自吹自擂,并巨额写实例和证明来增加陈述的可信度,不妨试试用这样的话开头的句子:“我有个很好的名声,那就是、、、”我的同事们告诉我,说我、、、

二、制定计划

想一想自己想从面试中得到什么,就面试准备和对策研究作出书面计划,对面试当天也要制定计划,以免贴贴撞撞地前往或丢三落四。安排好交通办法。

三、对策研究

对于对方提供的参观该单位,或就该这份工作非正式地谈点什么这种机会,千万不要错过。试着多了解一点该单位:其声誉如何?财政状况如何?谁是面试官?面试时间将会持续多久?面试时间?地点?设计一条前往面试的最佳路线。如果要过夜,往哪里?坐火车或大的要多少钱?如果面试中还包括要你做一段演示,那就检查一下你的声像设备是否完好。

预先排练

向任何一人愿意充当你的观众一一朋友、嫁人、或者猫一一排演一下你的设计思路对你的回答计一下时间,除了非常复杂的问题外,一般情况下的回答都没有必要超过一分半钟,按每分钟120个字的平均水平计算, 你可以将180字,这足以让你作出清楚而精确的表达了。联系如何在讲30秒后就表达出中心已死。联系如何用故事、实例和轶事来生动地讲述 你的经历。不要夸大或淡化你的成功得意之处。对自己的失误要诚实,但也要清楚地说明自己从中得到了什么教训。联系不要太多,只要能使自己对要说的话较为熟悉即可,这样在面试时你会感到很舒服,听起来也自然而然。

其实面试是一个展示你才能的极好机会,可别浪费了!

很奇怪,有许多人从如何面试失败这方面作准备、、、竭力相处自己不应该接受这份工作的所有理由。我们称之为,假腿。最常见的假腿包括:

我得不到这份工作。理由是:

我年纪太大或小

我自个太老或嫩

我经验不足或少

我在目前的岗位上工作的时间太短

提示?面试候选人的致命点是“唠唠叨叨、长篇大论、炫耀自己,只说不听。

G. 程序员面试的时候考官一般问什么问题

基本问题
主要包括介绍自己。学历工作经验家庭住址等
业务问题
按你应聘的岗位进行询问,看你了解多少,或者你的态度
综合问题
主要看你对待工作的态度,为人等问题。

阅读全文

与半程序员面试分布式锁相关的资料

热点内容
android开发创意 浏览:136
京剧猫为什么进不去服务器 浏览:782
怎么自己免费制作一个手机app 浏览:582
python同时迭代两个变量 浏览:740
好分数app家长版怎么删除孩子 浏览:424
安卓快手下载怎么没有下载到本地 浏览:228
怎么在安卓手机登绘旅人 浏览:404
桌面文件全部加密 浏览:401
6s怎么外接u盘需要什么app 浏览:131
linux查看文件权限命令 浏览:685
安卓手游存档怎么用 浏览:761
linuxyum安装ftp 浏览:690
村委会主任可以推行政命令吗 浏览:102
电脑文件夹封面多张图片 浏览:263
网吧总服务器叫什么 浏览:922
多个算法解决同一个问题 浏览:455
小车解压后我的购车发票呢 浏览:977
做app开发用什么云服务器 浏览:177
linux网卡子接口 浏览:985
21岁职高毕业学程序员怎么学 浏览:321