【39】C++岗位求职面试八股文第三十九篇(综合+智力题)
系列文章目录
第一篇:语言基础
第二篇:设计模式
第三篇:数据库
第四篇:计算机网络
第五篇:操作系统
第六篇:LInux
第七篇:数据结构
第八篇:智力题
[21]分布式多个机器生成id,如何保证不重复?
[22]扫码登录是如何实现的?
扫码登录当中涉及到的三种角色:PC端、手机端、服务端
扫码登录流程:
1 访问PC端二维码生成页面,PC端请求服务端获取二维码ID
2服务端生成相应的二维码ID,设置二维码的过期时间,状态等。
3PC获取二维码ID,生成相应的二维码。
4手机端扫描二维码,获取二维码ID。
5手机端将手机端token和二维码ID发送给服务端,确认登录。
6服务端校验手机端token,根据手机端token和二维码ID生成PC端token
7PC端通过轮询方式请求服务端,通过二维码ID获取二维码状态,如果已成功,返回PC token,登录成功
[23]如何实现单点登录
单点登录是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。
[24]账号密码登录
如果用普通的账号密码方式登录认证,PC端通过账号密码完成认证,然后服务端给PC端同步返回token key之类的标识,PC端再次请求服务端,需要携带token key,用于标识和证明自己登录的状态。
服务端响应的时候,需要对token key进行校验,通过则正常响应;校验不通过,认证失败;或者token过期,PC端需要再次登录认证,获取新的token key。
[25]APP认证机制
基于APP的移动互联网认证机制。
首先,手机端一般是不会存储登录密码的,我们我们发现,只有装载APP,第一次登录的时候,才需要进行基于账号密码的登录,之后即使这个清理掉这个应用进程,甚至手机重启,都是不需要再次输入账号密码的,它可以自动登录。
这背后有一套基于token的认证机制,和PC有些类似,但又有一些不同。
APP登录认证的时候除了账号密码,还有设备信息
账号密码校验通过,服务端会把账号与设备进行一个绑定,进行持久化的保存,包含了账号ID,设备ID,设备类型等等
APP每次请求除了携带token key,还需要携带设备信息。
因为移动端的设备具备唯一性,可以为每个客户端生成专属token,这个token也不用过期,所以这就是我们可以一次登录,长久使用的原理。
[26]分布式集群中如何保证线程安全?
使用分布式锁的方式来保证分布式中的线程的安全性,这样不同的服务不同的线程通过竞争分布式锁来获取共享资源的操作权限;例如redis的分布式锁、zookeeper锁,都可以作为分布式线程安全的手段
[27]商家推荐
某网站/app首页每天会从10000个商家里面推荐50个商家置顶,每个商家有一个权值,你如何来推荐?第二天怎么更新推荐的商家?根据权值建立小根堆,选取50个最大的商家来推荐。
使用推荐算法,根据过往的销售量,好评率等等,用户评分来确定,同时加入人工审核。
尽量分门别类的给每一块商品都有置顶的机会。因为可能存在某一类商品天然具有某种优势使得在你的推荐算法中评分比较高,结果推荐出来的商家都是卖一类商品的。
第二天不能根据第一天的算法,因为如果被推荐的50个相对于其他商家有很大的优势。
所以可以保留前一天置顶的50家中评分最高的25家,剩余25家从未被置顶的商家中选择
[28]如何设计一个本地缓存?需要考虑哪些方面?
缓存的应用很多,比如操作系统中的页面置换,计算机网络中的网站缓存,DNS缓存,数据库中的缓存
缓存需要考虑的点考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,
[29]老鼠与毒药
[30]烧绳子
[31]在24小时里面时针分针秒针可以重合几次
24小时中时针走2圈,而分针走24圈,时针和分针重合24-2=22次,而只要时针和分针重合,秒针一定有机会重合,所以总共重合22次
[32]100个奴隶猜帽子颜色
一百个奴隶站成一纵列,每人头上随机带上黑色或白色的帽子,各人不知道自己帽子的颜色,但是能看见自己前面所有人帽子的颜色. 然后从最后一个奴隶开始,每人只能用同一种声调和音量说一个字:”黑”或”白”, 如果说中了自己帽子的颜色,就存活,说错了就拉出去斩了,说的参考回答所有奴隶都能听见。 是否说对,其他奴隶不知道。 在这之前,所有奴隶可以聚在一起商量策略,问如果奴隶都足够聪明而且反应足够快,100个人最大存活率是多少?99人能100%存活,1人50%能活变种
[33]三人三鬼过桥
想办法凑成鬼一边,人一边
[34]赛马
[35]
[36]从rand(5)生成rand(7),从rand(5)生成rand(3)
[37]小猴子搬香蕉
Rand7()到rand5()Rand7()%5+1
[38]砝码称轻重,找出最轻的
[39]利用空瓶换饮料,最多喝几瓶
[40]高楼扔鸡蛋(经典问题)
最优解如果最优解法在最坏情况下需要扔X次,那第一次在第几层扔最好呢?参考回答是:从X层扔
全局平衡法:先二分,再十等分,再全局平衡法(每次仍,碎和不碎的最坏使用次数要尽可能相等)14 27 39 50 60 69 77 84 90 95 99 100
【41】N个强盗分配M个金币,求方案使得自己分配最多

此题还有变种:就是只需要一半人同意即可,不需要一半人以上同意方案就可以通过,在其他条件不变的情况下,1号该怎么分配才能获得最多的金币
【42】先手必胜的问题
【43】掰巧克力问题或者参加辩论赛
【44】海量数据处理
现在有一个文件,文件的每一行都是一个数据,文件一共有40亿行,可使用的内存是1G,请你求出文件中出现次数最多的数字。
Hash映射:将40亿的数据先用哈希函数计算,哈希函数为 hash = value % 100,结果会被映射到100个桶内;相当于,利用均匀分布的特点,将原始结果平均分100份。Hash统计:挨个用哈希表来分别统计每个桶中出现最多的数,其中,每个桶中内存是32G/100;排序:用快排依次比较这100个桶中的最大值,得出结论
一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析如果文件比较大,无法一次性读入内存,可以采用hash取模的方法,将大文件分解为多个小文件,对于单个小文件利用hash_map统计出每个小文件中10个最常出现的词,然后再进行归并处理,找出最终的10个最常出现的词。有一个文件,一行一个数据,每个数据大小不超过16字节,要求使用的内存大小不超过1M,需要你返回频率最高的100个词。• Hash映射:顺序读文件,对每个数据哈希,哈希函数为 hash = value % 5000,结果会被映射到5000个桶内;每个文件大概是200k左右。如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。• Hash统计:采用trie树/hash_map等统计每个桶中出现的数据以及相应的频率。• 排序:取出出现频率最大的100个数据(可以用含100个结点的最小堆)后,再把100个数据及相应的频率存入文件,这样又得到了5000个文件。最后就是把这5000个文件进行归并(类似于归并排序)的过程了
更多关于算法题解、软件开发面经、机器学习算法面经、各企业面试问题记录,关注Fintech砖,持续更新中。https://www.nowcoder.com/users/873777317
企业面试记录专栏https://www.nowcoder.com/creation/manager/columnDetail/0YBWnm
机器学习面经专栏https://www.nowcoder.com/creation/manager/columnDetail/j8nNy0
软件开发面经专栏https://www.nowcoder.com/creation/manager/columnDetail/0aXKaM
更多校园招聘常见面试问题(开发、算法、编程题目)参见CSDN博客:http://t.csdn.cn/V4qbH
欢迎关注、收藏、点赞后进行问题咨询及秋招建议
#我发现了面试通关密码##晒一晒我的offer##牛客在线求职答疑中心##牛客解忧铺##互联网没坑了,还能去哪里?#包含C++、操作系统、数据库、计算机组成、计算机网络、设计模式、操作系统、牛客网服务器项目、综合智力题等