面试刷题10-2上

阻塞和非阻塞区别

阻塞/非阻塞是形容函数的调用。
select的底层实现

用户空间维护一个fd_set, 内核将fd_set拷贝到内核区,发生IO事件时,就会改变fd_set的状态,调用返回时,遍历fd_set查询IO事件.
tcp握手挥手

tcp通过三次握手建立连接,通过四次挥手断开连接

简单描述三次握手和四次挥手的过程。
讲一下智能指针

采用引用计数机制,引用一次,计数器加1,当计数器为0时调用析构函数释放内存。
函数里面定义一个int类型变量,存在哪,加上const呢,有什么区别,加上static呢
讲一下c++怎么实现多态的
知道c怎么实现多态的吗 (虚函数表和虚函数表指针)
讲一下回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

C/C++ 的问题都比较偏底层

 

shopee 一

算法:字符串做+法, “234” + “678” = “912”

比较经典的模拟题,考一下写代码的感觉。

OSI 前四层的作用

物理层,链路层,网络层,传输层

TCP的滑动窗口用来干啥的

控制数据的发送,保证可靠性。

TCP四次挥手

面试刷题10-2上_第1张图片

为什么要四次挥手

确保数据能够完成传输,但关闭连接 时,当收到对方的 FIN 报文通知时,它
仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以
未必会马上会关闭 SOCKET, 也即你可能还需要发送一些数据给对方之后,再发送 FIN 报文
给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下
都是分开发送的

简单的说,就是使数据传输完成。

time wait 和 close wait是干啥的

time wait是确保最后一次挥手信号能够到达。

close wait是前两次挥手到发送主动关闭时要间隔一段时间。

什么时候用tcpdump

TCPDump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

Server能不能提前close,会有什么结果

不能

滑动窗口size每次衰减/增大多少
 

 

HTTPS和HTTP的区别, HTTPS request的流程

http是明文传输,https是http+SSL加密

浏览器访问域名的事件流程

DNS域名解析,TCP连接建立,HTTP请求,HTTP响应,浏览器渲染解析。

ARP攻击是怎么回事

ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址。

ARP 攻击发送在局域网内

ARP协议存在很多漏洞和不足,给计算机网络造成很大的隐患。首先ARP协议是以广播方式发送ARP请求的,只要是同一个网段内主机都可以收到,这就为攻击者以可乘之机,攻击者可以发送大量的ARP请求包,阻塞正常网络宽带,使局域网中有限的网络资源被无用的广播信息所占用,造成网络拥堵;其次ARP协议没有安全认证机制,因为局域网内主机是建立在信任的基础上的,所以只要主机接收到ARP应答包,都会缓存在ARP表中,这就为ARP欺骗提供了可能。攻击者可以发送错误的IP地址MAC地址的映射关系。

怎么样防止ARP攻击

在交换机配置相关协议

知道虚拟IP吗(这个有点不确定。。就说好像是NAT内部的IP地址,与之对应的是公网的IP)

C++从代码到可执行文件是怎么生成的

预处理,编译,汇编,连接。

动态链接和静态链接有啥区别

静态连接库是全部编译在一起,当要增加新功能时需要重新编译。

动态链接库是分开编译,调用时加载

C++,python多态怎么实现的

为什么要GIL,用来解决什么问题的

有用过协程吗?和线程有什么区别

用户级线程,不需要内核进行切换。

什么是内存泄漏

不再使用的内存没有及时释放。

一个内存泄漏的进程退出还有有影响吗

没有影响

怎么样会有僵尸进程

 

 

 

shopee 二

无手撕算法…..只需要讲概念和实现

如何大数组找top K

如何实现LRU

双向链表+Hash表

如何实现高可用

分布式存储主挂了怎么办

slave选举算法

如何预防脑裂

MySQL和mongodb的区别

关系型和非关系型

为什么NoSQL快(没答出来)

C++编译阶段都干了啥

有啥问题    ->(为什么NoSQL快


 

字节跳动 游戏研发岗(offer)

视频面

一面

  1. 自我介绍
  2. 如何判断一个数是不是2的幂次? 大数高精度,小范围数n&(n-1) == 0? true : false;
  3. 代码实现 快速排序,堆排序 
  4. 项目

二面

  1. 自我介绍
  2. [LeetCode] Partition List 划分链表原题
  3. 项目,聊到帧同步,状态同步的实现原理
  4. map,set,vector 内部实现原理
  5. TCP/UDP,三次握手四次挥手
  6. 渲染管线


 

  • 自我介绍
  • 解释循环队列代码实现原理
  • hash_map
  • C++11新特性
  • C++多态原理
  • static的作用
  • malloc/free和new/delete的区别
  • 内存分哪五大区
  • 指针和引用
  • 死锁
  • 线程和进程的区别
  • 赛马问题
  • TCP/UDP
  • 拥塞避免算法的具体过程
  • 三次握手,四次挥手
  • 帧同步,状态同步,逻辑表现分离
  • 对游戏开发的理解
  • map,set
  • vector的扩容机制
  • 排序算法
  • https和Http的区别
  • 并发懂多少?
     

一面

首先介绍一下自己

说一下在实习期间做的项目

说一下数据库索引底层结构

B+树

说一下https的原理

面试刷题10-2上_第2张图片

说一下redis在分布式情况下的key是如何查找的

说一下几种map间的区别

说一下线程池的几个参数和具体用途

我在这里下,面试官可能不太了解。所以说了很久线程池的不可重入锁的用途。

编程题

大数相加

使用两个非空单向链表来代表两个非负的大整数,数字的最高位在链表的最开始节点存储,每个节点只存储一位数字,将这两个链表相加后返回一个新的链表。

例如 (6->3->5->8)+(1->4->3)=(6->5->0->1)

不是很难,但是现在想想感觉可以翻转链表按照leetcode 2的思路做,但是当时直接记录链表长度,递归连接了。

 

二面

首先介绍一下自己

说一下在实习期间做的项目

balabala具体项目的一些思路以及解决方案,说了很久

 

场景设计题:

积分换礼物的活动,每个用户(user)可以用不定积分(point)兑换一种礼盒,且每人限换一次。下单(order)逻辑:1)创建订单 2)扣减用户积分 3)扣减礼盒库存 4)下单成功

 

根据题目讨论了一下分布式锁,以及锁的范围大小,幂等的处理问题。

 

之后讨论了一下分布式事物处理方案,实习的组内是使用消息队列的形式保证事物的,但是当时和面试官讨论的时候一直纠结于如何处理回滚问题(我到现在也不知道,看网上的资料也只是通过重试保证一致性),没有回答好。

 

三面

三面的问题就偏向hr,问了一下我是如何学习的,以及在学校里的兴趣爱好,然后就介绍了一下做过一段时间的美漫翻译,嘿嘿。

聊了一下简历上的一些项目。

 

问题:

说一下map的get,put。

说一下堆的增删

说一下多进程间通讯方式。

说一下在命令行kill一个线程,在操作系统通信层面,都做了什么?

信号量

编程题 输入二维数组matrix, 将其中被1包围的所有0改为1  dfs

编程题 leetcode 71

 

最后问了一下我在阿里和头条间如何选择,舔!!!


 

腾讯游戏客户端开发

因为简历投递的较晚,提前批临近结束前才被鹅厂捞起,接到了约一面的电话,当时挺紧张的,手都在抖。(第一次面试)
到了约定时间一分不差打过来了,感叹。

一面(60分钟)

自我介绍
项目相关
学习相关

数据结构:

顺序存储链式存储优缺点
冒泡和快排平均时间复杂度
链表是否带环
如何不使用第三个数交换两个数
bfs dfs

c++:

虚函数表,什么时候创建
重载 多态
inline和宏区别
c++内存模型

网络:

长连接短连接应用场景

 

 长连接适用于操作频繁/点对点通讯等连接数不太多的情况,如:一些游戏/即时通讯场景应该使用长连接;如:老师端和学生端的即时通讯教学软件; 最经典的案例是:数据库使用的连接(如果使用短连接会造成Socket错误

)。ps:每个TCP连接都需要三步握手(时间),每个操作必须先连接->再操作处理速度会降低,而且每个操作用完不断开,当次处理时直接用通道发送数据包,不在建立TCP连接。

  短连接适用于Web【wapWeb/H5等】的http服务,长连接对于服务端来说会耗费一定资源。对于电子商务Web的访问量可能是千万级别甚至亿万级别的。如果使用长连接的方式 当一万个用户访问时会占用一万个连接,假设服务器站点(IIS等)的通信吞吐量只有1千个,那么另外九千人就彻底挂啦,所以并发量大且用户不需要频繁的交互式操作时 用短连接为上策。
如何控制长连接

设置一个心跳包。
tcp三次握手四次挥手
四次挥手为什么第二次第三次不能合并在一起

tcp是全双工通讯
拥塞控制
状态同步帧同步
王者荣耀是什么同步 为什么
状态同步有哪些应用场景

总结:实在是面了好久,讲的口干舌燥,问题基本都回答上来了,不过瑕疵还是很多,最后让我回去等通知。

第二天早上就接到了约下午二面的电话,到了约定时间后一直没接到电话,很忐忑的等了10分钟左右,实在按耐不住就回拨了座机转人工咨询面试情况,然后hr说帮我问一下。刚挂电话,二面的电话就来了。

二面(25分钟)

聊一面经历

昨天听说你不太了解手机端纹理压缩格式,回去有了解吗(回来看了忘了一点,答得不好。)
协程是什么

用户级线程
c++多态如何实现
虚函数表创建时期
mysql会吗(我:“不会,在校学的mssql”,面试官:“mssql太简单了”。。。。。。。。。。。。)
有哪些着色器,有哪些坐标系,哪个坐标系是二维的,有哪些变换,这些变换分别应用在哪些着色器里
深度测试阶段
高斯模糊如何实现
会opengl吗(只会dx)
mipmapping(一直讲讲完了纹理采样,面试官说你讲了挺多啊。。)
学习相关
项目相关
除了项目的还开发过什么游戏
平时玩什么游戏
平时玩什么腾讯游戏
腾讯手游玩吗 玩什么(我把刺激战场和平精英说成两个游戏了,罪过。)
玩fps游戏吗

 


 

一面

  1. 问了一些在腾讯实习的东西。
  2. k8s上怎么做的RPC
  1. 虚拟ip不是会变吗?怎么找到服务的?

ARP协议

  1. 你们有尝试过Service Mesh之类的东西吗?不敢多说。。。
  2. 讲个熟悉的数据结构
  3. HashMap讲一下原理以及使用场景
  4. 红黑树为什么要在长度为8再变

此时,红黑树的操作效率高于链表

  1. ConcurrentHashMap的使用场景以及原理

多线程中使用索引。

  1. 讲讲MySQL的索引

索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引

  •  MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换
  •  MEMORY/HEAP存储引擎:支持HASH和BTREE索引
  1. MySQL的事务类型

MySQL的事务类型

事务概念:

一条或一组 SQL 语句组成一个执行单元,其特点是这个单元要么都执行要么都不执行,单元中的每条 SQL 语句相互依赖,形成一个整体,如果某条 SQL 语句执行失败或者出现错误,那么整个单元就会回滚,撤回到事务最初的状态,如果单元中所有的 SQL 语句都执行成功,则事务就顺利执行。

举个栗子:

张三的账户有 1000 元,李四的账户有 1000 元,现在张三准备给李四转账 500,此时执行 SQL 为:

UPDATE tb_account SET balance = 500 WHERE name = '张三';

UPDATE tb_account SET balance = 1500 WHERE name = '李四';

假如在执行完第一条 SQL 语句后,中间出现了错误,执行不到第二条,这就导致了张三的余额变了,而李四的余额没有变。这时就需要事务来解决这个问题,而上面两条 SQL 语句就组成一个执行单元。

事务的特性(ACID):

⑴ 原子性(Atomicity):

    事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

⑵ 一致性(Consistency):

    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如说刚才的栗子,张三和李四他们在转账之前的余额总和为 2000,经过事务执行之后,他们的余额之和也得是 2000。

⑶ 隔离性(Isolation):

    一个事务的执行不能被其他事务干扰,即一个事务的内部操作及使用的数据对并发的其他事务是隔离的。并发执行的各个事务之间不能互相干扰。

⑷ 持久性(Durability):

    一个事务一旦被提交,它对数据库中数据的改变就是永久性的,后续的其他操作和数据库故障不应该对其有任何影响。

 

 

MySQL 提供了 4 种事务隔离级别:

⑴ READ UNCOMMITTED(读未提交记录)

    允许事务读取未被其他事务提交的变更,脏读,不可重复读和幻读的问题都会出现。

⑵ READ COMMITTED(读已提交记录)

    只允许事务读取已经被其他事务提交的变更,可以避免脏读,但不可重复读和幻读问题仍然可能会出现。

⑶ REPEATABLE READ(可重复读)

    确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读问题仍然存在。

⑷ SERIALIZABLE(串行化)

    确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作,所有并发问题都可以避免,但性能十分低下。

MySQL 默认的事务隔离级别为 REPEATABLE READ。

 

  1. Spring是怎么支持事务的

 

  1. 为什么@Transation注解修饰的方法可以在多线程的方式下互不影响

 

  1. Connection是存在什么样的数据结构上的
  2. 分布式锁用过吗?用Redis怎么实现
  3. Redis集群怎么搭?怎么分片的?
  4. CAS知道吗?原理是怎么样的

compare and swap,存一个期望值和,当前值与期望值相同时,才修改,否则就不修改。

  1. CAS有哪些使用场景?

原子操作用CAS

  1. Atomic在高并发场景下有什么问题,缺点?

占用CPU资源高

  1. CAS线程安全吗?有什么问题?除了线程安全呢?对于CPU呢?

安全,CPU底层的操作。

  1. 用过Dubbo吗?稍微讲一下
  2. Paxos算法稍微讲一下
  3. ZooKeeper最少要几个节点,为什么?
  4. 了解哪些开源的组件
  5. CAP知道吗?大概讲一讲

 

 

 

 

 

 

 

你可能感兴趣的:(算法)