/everyday-one-question

made,每日一问答答案好难找,快帮我找啊!

everyday-one-question

made,每日一问答答案好难找,快帮我找啊!

第一周第一题:select和epoll各是什么鬼?

就是两种IO多路复用机制啦!参考:https://segmentfault.com/a/1190000003063859(TODO:写详细一点)

第一周第二问:tcp断开连接有几次握手?每次是哪边发到哪边?

4次啦!
方向是→ ← ← →(右左左右)。(TODO:解释一下为什么)

第一周第三问:有哪些进程间通信方式?

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
套接字( socket ) : 套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

第一周第四问:jvm垃圾回收机制是怎样的?

jvm的垃圾回收方法大体分为两种:引用计数法(存在循环引用缺陷)和根搜索算法(有延迟性,是目前的主流算法)。
引用计数法:当一个对象被引用时,该对象的计数+1,当对象的生存周期结束时计数-1。计数为0时会调用GC进行会搜。
根搜索算法:从GC root开始对可达的对象进行标记,然后将不可达对象从堆中清除。

jvm采用分代回收的方式进行垃圾回收,
在java堆中,新生代主要存放很快就会被GC回收或者比较小的对象,新生代的垃圾回收采用复制算法,即将新生代分为三个区Eden区和两个survivor区,默认大小为8:1:1,默认情况下会留一个survivorB不使用,在发生GC时将Eden区和使用的survivorA的存活对象放入未使用的survivorB当中去,然后对Eden和survivorA进行清理。若survivorB的大小不足以存放所有存活对象,则将存活对象暂时存放到老年代的空间当中。
老年代主要存放对象是在新生代经历了多次回收依然存活或者特别大的对象,发生在老年代的垃圾回收采用标记-清除算法(会产生大量内存碎片)或者标记-整理算法(会造成高额的时间开销),标记-清除算法是先老年代中存活的对象进行标记,然后将未标记的对象直接清除。标记-整理算法在标记部分与标记-清除算法一样,然后将已标记的对象向内存的一端移动,然后直接清理端边界以外的内存。
(参考书目:《深入理解Java虚拟机》周志明)

第一周第5问:tcp建立连接的三次握手发的东西具体包含什么?

第一次: SYN seq=x
第二次: SYN seq=y ACK=x+1
第三次: ACK=y+1

第6问:http、https从输入网址到显示网页,分别要经历哪些时间段?

第7问:魔兽争霸3读图耗时主要与哪个硬件参数有关?

第2周第1问:多个wifi并存时它们是如何处理冲突的?

设置在不同的信道和频率

第2周第2问:简要说明对称密钥和非对称密钥的特点,为什么需要用它们。

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密。对称加密算法非常容易根据原文和密文对照,在线性时间内破解。而非对称加密算法(典型的如RSA)很难被破解,这样就有效增强信息安全性,主要用于Web上避免被监听以及MITM攻击。

第2周第3问:用程序解决数独问题需要用什么方法?

DFS
还有黑科技dancing links

第2周第4问:写多线程程序为什么需要加锁,锁有哪些种类?

有效处理资源分配和冲突的问题。
互斥锁,递归锁,读写锁,旋转锁,文件锁,信号量。

第2周第5问:什么是同步、异步、阻塞、非阻塞?

同步:发出一个调用时,没有得到结果调用就不会返回。相当于串行执行一连串任务。
异步:发出一个调用后,继续执行后面的命令,在实际处理者得到结果之后再通知回调返回结果并处理后续相关的东西。相当于并行执行/等待若干上下文无关任务。
阻塞:一个调用/资源请求未完成的时候进入等待状态,请求得到结果之后才能做别的事情。
非阻塞:一个调用/资源请求未完成的时候先做别的事情,等结果来了再回到相关任务做后续处理。

第2周第6问:什么是一致性哈希?

一种分布式哈希,特性是在移除/添加一个节点(机器,ip)时,它能够尽可能小的改变已存在 key 映射关系,尽可能的满足单调性()的要求。

第2周第7问:面向对象三要素是什么?c++的虚态是什么,还有什么面向对象的东西?java的接口和虚函数是什么?

封装,继承,堕胎(大雾)。C++虚态就是通过vtable进行运行时的对象确定和调用绑定。
JAVA我不会,请补充。

第3周第1问:内存装不下所有数据时,用什么排序方法比较好?

归并排序

第3周第2问:手写二叉树翻转算法。

第3周第3问:什么是SQL注入?如何预防?你常用的防SQL注入模块的具体内部实现?

SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。最简单的比如 x' and 1=1; DROP TABLE。一般通过使用参数化调用的API或者进行输入过滤非法字符来预防。

第3周第4问:HTTP的GET请求与POST请求区别在哪?各自的特点?推测微信公众号连接私人后台服务器用的应该是哪种请求?

第3周第5问:机器学习中,什么是过拟合?什么是交叉验证?模型集成方法中的stacked generalization是什么?

过拟合就是,虽然模型在训练集上的误差很低,但是泛化能力很差,在其它的数据集上误差很高。

image

第3周第6问:现在有8瓶药,其中一瓶是毒药,吃了一星期后会死。现在只有一星期的时间,你有很多萌萌的老鼠可以用来实验,问最少需要用几只老鼠?如果有1000瓶药呢?

可以对每瓶药用二进制表示。
比如一共有8瓶药,分别表示为000,001,010,...,111,因此可以让三只老鼠吃下对应位是1的那几瓶药。
一周后,用死掉的老鼠序号可以还原出哪瓶药是毒药。
对于1000瓶药,至少需要10只老鼠。

第3周第7问:什么是堆排序?堆这个数据结构支持哪些操作,这些操作的具体实现是怎样的?和操作系统中的堆空间有什么关系?

第4周第1问:有n个银行排成一圈,我在各个银行存或借了一些钱,已知我在第i个银行存款为a[i]元(借的钱看作负存款),我在所有银行的存款总和为0元。我可以进行一种操作:把一个银行的若干钱转到相邻的银行。我要用最少的操作次数来把所有银行存款归零,我要用什么策略来转钱呢?

第4周第2问:(1)写贪吃蛇游戏,为减少每次移动的时间复杂度,蛇身需要用什么数据结构存储?(2)将存储1~n的序列打乱,怎么搞比较好?

第4周第3问:连数据库我们常用orm框架。什么是orm?它碉在哪里,不碉在哪里?

第4周第4问:说一下LL(1),LR(0),SLR(1),LALR(1),LR(1)文法的特点,为什么要搞出这么多种文法?

第4周第5问:你是一个插花大师,现在有n种花,每种花枝数有限,第i种花有f枝,现在你要从中选s枝花,问有多少种选法。(1 ≤ n ≤ 20, 0 ≤ s ≤ 10^14, 0 ≤ fi ≤ 10^12)(若有某种花数量不一样,则认为这两种选法是不同的。答案很大,请给出答案对1e9+7取模的结果)(样例:n=2, s=270030023747,f1=891135146290,f2=437305641972)(算法题)

第4周第6问:F(x,m) 代表一个全是由数字x组成的m位数。设计算法判断该式是否成立: (F(x,m)除以k的余数 == c)。数据范围:1≤x≤9, 1≤m≤10^10, 1≤m≤10, 0≤c<k≤10,000。

第4周第7问:占几个字节?能存得进MySQL中utf8_general_ci的地方吗?

第5周第1问:(1)有100个石子,两个人轮流取,每次最少1个最多10个,取光者胜。问先后手有无毕生策略。(2)有三堆石子,两个人轮流取,每次只能从一堆中取,至少取一个,问先后手有无必胜策略。

第5周第2题:你是一名老师,现在要将一群新生分为两个班。已知一些同学互相有好感,我们用好感度来表示某两名同学之间的好感。有好感的两名同学分到一个班的话,他们之间会爆发恋爱,恋爱的影响力与好感度相同。教导主任只会察觉到影响力最高的那个恋爱。你为了保住饭碗,要利用这次分班来使这个被察觉的恋爱影响力最低。要使用什么策略来分班?编程实现要用到什么数据结构?

第5周第3题:要从一些物体中随机选择一个物体,请设计一个带权值的随机选择算法,时间复杂度多少?

第5周第4问:三国杀中,设闪电对一个人判定劈中的概率为p,场上有n个人,按出牌顺序编号为1~n,放闪电的人是1号。假设其他什么行动都没有,只有闪电在场上判定、移动到下一家,直到劈中人。求各个位置被劈到的概率。(比如第i个人被批的概率=f(i,p,n) = ...一个函数)

第5周第5问:某高校的学生自助报道注册系统,需要先输入学号再刷指纹,而不是直接刷指纹,这是出于什么考虑?

第5周第6问:什么是矩阵快速幂,有什么用途。

第5周第7问:一个网站的用户登录系统,用户的已登录状态的维持有哪些方法?各有什么优缺点?

第6周第1问:有两百个类似恐狼先锋的狼站成一排,第i个有a攻击,帮两边相邻的怪加b攻击。我现在有一把无限耐久无限连击的秒天秒地的武器,要把这些狼全部杀光,要求用某种顺序杀来使自己耗血最少,求我至少耗多少血。这题要用什么算法?

第6周第2问:像斗鱼这样的直播网站,能否准确地统计某个房间的当前观众人数?为什么?有什么近似统计的方法?有什么办法推测出直播网站的人数有没有水分?

第6周第3问:(1)一个搬运工脚下有一百台电视,他要走100米到仓库,每次他最多能带50台电视,他每走一米要摔烂一台电视(没带电视的话不能走,必须每走完一步摔烂一个),请问他最多能把多少台电视搬到仓库?(2)和第一题差不多,脚下n台电视,x米到仓库,每次最多带x台,每走一米摔z台。

第6周第4问:计算机中的指令流水线是如何进行分支预测的?

第6周第5问:无向图有哪些方法判断是否有环?有向图呢?

第6周第6问:计算机中的随机数为什么被称为伪随机数?魔兽争霸3中的攻击力“伪随机”和上面说的那个一样吗?将伪随机数当做随机数使用影响大吗?当前有没有真随机数的实现?

第6周第7问:筛素数有很多种写法,写出时间复杂度低的筛素数算法要注意哪些点?(很多人问我的每日一问哪来的,基本上是我每天艰难地瞎逼想一个我认为有价值的问题,大概来源有面试题、acm题、课程问题等。想搜索类似的可以上网搜百度阿里腾讯面试题看看)

第7周第1问:09开了两个号从零单排,势要上2000分。每个号都是0分开始,赢一场加50分,输一场扣100分,不会跌破0分。09每次都用分低的号来打,给出09打一场游戏的胜率P,求有号达到2000分所要打的场数的期望值。

第7周第2问:显卡是什么?为什么有碉显卡就能开全画质玩游戏、一顿搞机器学习?

第7周第3问:在线看视频时,快进、快退、拖进度条,降落地点是不连续的(在一个范围内总会降落到同一时刻,而无法降落到这个时刻周围的若干秒),这是为什么?

第7周第4问:(1)简易的矩阵乘法实现中,使用二维数组存储矩阵,用三重循环来计算矩阵乘法C=A*B,每次循环计算矩阵A第i行与矩阵B第j列中第k个数的乘积,加至矩阵C的(i,j)元素上。i、j、k应使用怎样的循环嵌套顺序,使程序运行时间更短?是ijk还是kij,为什么?(2)使用GPU可以很碉地计算矩阵乘法,这又是为什么?

第7周第5问:(1)python中,可以用“+”将list连接起来,底层是怎么实现的?如果我有数量不定的一大堆物体要一个个加进list,加完再对list进行其他操作,怎么做运行比较快?(2)java能用“+”把一群字符串加起来,底层是怎么实现的?我又有数量不定的一堆字符串要连起来,怎么做运行比较快?

第7周第6问:wifi可以选b、g、n模式,可以选择单独一种或者混合,这些模式各是什么原理?(昨天的题,今天还要再出一题)

第7周第7问:神经网络算法的原理是什么?

第8周第1问:(1)设计一个能玩扫雷的AI算法,支持输入一个扫雷棋盘状况,输出下一步的操作。计算算法的时间复杂度。(不要用机器学习)(2)用机器学习来搞扫雷AI,怎么搞比较好?

第8周第2问:java中如何判断两个对象相等?为何有时用Interger对象可以用==来判断相等?

第8周第3问:什么是websocket?底层又是怎么实现的?

第8周第4问:fat32、ntfs、exfat这些文件系统各是怎样工作的?不同文件系统的存储设备之间拷贝文件是否比相同文件系统的慢,为什么?

第8周第5问:zip格式是用什么原理进行压缩的?它对文件目录结构是怎样记录的?

第8周第6问:电脑的mac地址可以乱改,如果两台改成一样MAC地址的电脑连接同一个路由器上网,会发生什么?

第8周第7问:现在有10W个人参加抽奖,我要抽其中2016个人来拿奖。程序实现,用什么方法比较碉爽?