ACM铁牌,只有邀请赛铜,暴力杯这种奖。项目也就libco,幸亏意识好一点加运气,拿到了还不错的offer。
公司 | 进度 |
---|---|
海康威视 | 一二面 offer到手 |
东品游戏 | 一二面 offer到手 |
欢聚时代 | 一面挂 |
美团 | 一面挂 |
字节跳动 | 一面挂 |
腾讯 | 一面挂 |
从这里就可以看出来博主贼菜了。。所以9月下旬疯狂看面经补基础知识。
大概是转运了。
公司 | 进度 |
---|---|
帆软 | 一面 offer到手 |
拼多多 | 一二面hr面 池子里面泡着 |
奇安信 | 一二面hr面 offer 感觉劝退价 |
像素软件 | 笔试+面试+hr面 池子里面泡着 |
销售易 | 一二面 后续估计凉 |
吉比特 | 一面挂 |
58 | 一二面挂 |
网易互娱 | 一面挂 |
高德 | 一面挂 |
快手 | 一面过 二面通知时已签约其他 |
之前写过的就贴链接,没写过的就尽量写一写,10月的面试,人心态容易崩。
海康威视:
C++软件开发
现场面 一面:技术面 30+
全程看简历怼项目,没问基础知识。项目写的作用优点,为什么?为什么需要这个东西?有没有验证过?校园经历有什么收获?编程题:手写代码,二叉树中找到10的节点并输出路经。dfs加栈。如何找最近的10节点?bfs加回溯。
现场面 二面: 综合面 20+
讲一下项目做了什么?以及hr常见问题,四级,女朋友,日常,意向薪资,工作城市等等。
东品游戏:
cocos_2d开发 语言c++
现场面一面:技术面 30+
因为是做游戏的,我没相关技能点,就很尬。
b+树 红黑树 map和set区别 epoll 智能指针 vector和list 剩下相关一律不会。
二面:hr面 20+
实习时间 技术栈 还有一些常见问题。
欢聚时代
c++后台
现场面 一面: 技术面 20+
问得很快,当时早上跑了1000米,人都废了。回答也很随意。
自我介绍 算法简介:动态规划 分治 红黑树优点 窗口n 虚表静态 epoll sleect sort内部实现 以及修改静态库或者动态库的源文件会不会有影响。
美团:
后台开发
视频一面:技术面 50+
https://blog.csdn.net/practer/article/details/101074810
吐槽一下牛客网的网页写代码,面试官还要你能编译运行。真的难顶。
腾讯:
后台开发
电话一面:技术面 50+
https://blog.csdn.net/practer/article/details/101068645
第一次面试,回答问题的时候没经验,就很尬。
字节跳动:
后台开发
视频一面:计数面 50+
自我介绍 经历 线程进程区别 线程通信方式 互斥锁?如何优化? 堆插入 流中输出中位数
结束后2分钟代码运行正确。再次吐槽牛客网页写代码。
因为9月份的基本都不满意或者拒了。所以10月处于没offer的状态。建议还是多看面经,多记。有时间还是多看看书。
帆软:
后台开发
电话一面:50+
自我介绍 linux 数据结构 计算机网络 操作系统 基本都有问到,估计不太用c++ 所以基本没问c++ 回答的也都还行。
隔天hr就oc了。效率真快。秋招末期流程走的快。
拼多多:
后台开发
拼多多基本都是微信电话面,然后代码题发网页写。
电话一面:40+
自我介绍 怼项目 红黑树 touch一个文件发生了什么 tcp 手写hash_table
感觉没什么希望了,结果隔天发来二面通知,真是神奇。
电话二面:40+
自我介绍 项目简单说了一下 一些基础概念 代码 链表合并 最近公共祖先
gcc 静态库如何生成 没试过x
最开心的一场面试了。比较愉快。沟通很顺利。开心了一下午。隔天吉比特挂的短信发过来就尬住了。10月情绪容易波动。特别是没offer的时候。
电话hr面:10+
简单问一下,意向工作城市,薪资,手里offer这些问题。2-3周出结果。感觉池子里估计泡死了。捞不出来。准备签其他公司了。
奇安信
linux开发
视频一面:20
自我介绍,主要问题集中在linux,以及线程进程方面,学习的不是很深入。很多问题回答的不好。不知道刷kpi还是啥,给通过了。也许有一些问题回答的还不错。比如tcp包头大小20-60?
视频二面:20
自我介绍 问题和一面类似。简单问了问项目。又是神奇的通过了。
hr电话面:20+
问了一些,很有水平的问题,或者说简单问题进行了探讨。感觉很专业的样子。我没什么准备反而回答的一般。
总体来说面试难度不小。现在池子里面泡着。
像素软件
游戏c++开发
现场笔试:40+
A B卷 做完A做B 面试官会根据你得分是否继续下一个流程。题量不小,还有叉积点积 矩阵(都忘了 理论上做游戏需要这个
面试:20+
两个面试官轮流问问题,比较随意,问问项目,问问基础。笔试已经包括了不少面试基础题了。
hr面:10+
之前有电话联系过 所以就简单的问了一些问题,谈谈实习什么的。然后就回去等通知了。
一家零几年比较出名的公司,可惜受限制与国内市场了。又是泡池子了。
销售易:
java研发
现场一面:40+
面试官是java的,不太会c++,问了一下基础问题,就开始聊如果入职改怎么转岗的问题了。
现场二面:30
面试官还是java的,应该和一面面试官交接了一下。面了一会就开始问我对java有什么了解?对最新的语言有什么了解?
聊完之后说,不能决定是否录取,宣讲会再面一次大leader,不过太晚了,感觉我等不起了。
吉比特:
游戏研发
现场一面:40+
都是经典的问题,主要问数据结构和c++,然后就挂了,很神奇。
自我介绍 虚函数 内存泄漏 深拷贝浅拷贝 const和指针 引用 排序 归并排序 快排 堆排 无向联通图 dfs o(n) ku o(n^3) 并查集 笔试题 说了思路 其他不会 聊天 人生规划 平时干什么 结束 常规问题 没问操作系统和计算机网络x
58:
后台
QQ一面:20+
记不清了,估计刷kpi。当天回答的贼差。结果过了一面。
QQ二面:20+
kpi 然后挂了。
网易互娱
游戏研发
视频一面:40+
几个面试官轮流问问题。有一些地方就不太会。比较尬的是有一个问题我加错了。然后回答错了。结束才发现。
高德
研发
电话一面:30+
感觉阿里的电话噪声很大。。。。面试官用自己电话好多了。
就是基础问题,面试太多,根本记不清了。
快手
研发
视频一面:40+
记不清问题了,22号一面的,都是基础问题,不过回答的一般,当时都浪了好多天。想吐槽的是28才通知二面,我三方都寄出去了。。
总结一下。没什么项目和实习,很吃亏。所以就要从基础补。基础回答的好一点。看面经不要浮于表面,要深入其中。这样才能`留下不错的印象。可能有你不会的。但是会的一定要回答的很精彩。每次面试都是差缺补漏的好时机。不要浪费机会。知识面也要及时扩展。
项目:比较难准备,起码源码都知道在干什么。在做什么。
基础知识:疯狂补面经,看博客。
算法:大数据和智商题就那么多,看多了就会了。代码题最好看见一个实现一次。面试没什么时间给你思考,调试。
知识点延伸很重要。类似客户端发送包,但是服务器端口没打开回去rst包,linux如果查看哪个线程占用cpu高这些都要会。top+gdb 很多种方法 另外投简历不要拘泥。客户端这些能投也可以投一投。别头铁。看清楚自己在哪,能拿到什么offer。然后去准备。
一些自己准备的一下基础知识。不全,可以简单看看。
1.网络
(1).tcp 三次握手:
c代表客户端 s代表服务端
第一次 c->s 发送 syn包 seq=n 客户端状态变为syn_send
第二次 s->c 发送 syn ack包 ack=n+1 seq=m 服务器转台变为 syn_recv
第三次 c->s 发送 ack包 ack=m+1 seq=n+2 服务器客户端变为establelished
(2).为什么要三次握手:
建立可靠连接,确定序号,序号一般为随机值,防止网络中被延迟的分组在以后被重传。
(3).为什么不两次握手:
两次握手有可能第二次丢失,造成建立多个链接,浪费资源。序列号得到确认。
(4).四次挥手过程:
第一次 c 发送fin c 状态变为 fin_wait_1
第二次 s 发送 ack s 状态变为 close_wait c 状态变为 fin_wait_2
第三次 s 发送 fin s 状态变为 last_ack c 状态变为 time_wait
第四次 c 发送 ack s 状态变为 closed
(5).四次挥手原因:
tcp是双工的协议所以接收方发送方都需要fin和ack 所以有四次
(6).time_wait状态原因:
时长为2msl 如果客户端直接进去close 服务器没收到ack 就会重新发送fin包,客户端close之后 服务端就不会接收到ack而是收到rst,防止最后一次握手数据丢失。 而且如果关闭之后又使用有可能造成数据混淆。
(7)tcp udp 区别:
tcp 有连接的流服务 tcp 拥有标志位 序号 数据校验 超时重传 窗口 拥塞控制 等来控制链接的可靠,以及进行会对网络有益。慢但是可靠 文件传输 重要信息
udp 无连接的报文服务 快 但是不可靠 视频 实时通信等
(8)p2p:
https://www.cnblogs.com/linsanshu/p/5546948.html 特点减少了服务器的负载,负载均衡,人人都是用户也是服务器,缺点用户少了用户体验极差。越多越好。采用哪种拓扑以及如何优化是重点。
(9)打开一个网页发生了什么,例如 www.baidu.com :
dns协议查找到 网址的ip 顺序 浏览器 电脑 路由器 isp网络服务提供商 域名服务器 用tcp协议建立连接 然后就开始用http协议 post get这些请求了 用到的协议 dns http tcp ip arp(以太网会用到mac地址) 路由器上ospf等内部网关协议 bgp等外部网关协议 「
(10)网页打不开问题在哪:
本机 网络 服务器 服务器检测:http协议会返回错误码 网络检测:用手机打开 本次错误:ping 127.0.0.0 本地回环 可以就是本地没问题 有问题可能是硬件或者网络配置
(11)tcp同时打开或关闭
打开:同时两端的状态变化都是由CLOSED->SYN_SENT->SYN_RCVD->ESTABLISHED。
建立连接的时候需要四个数据包的交换,并且每个数据包中都携带有SYN标识,直到收到SYN的ACK为止
关闭:ESTABLISHED->FIN_WAIT_1->CLOSING->TIME_WAIT->CLOSED
CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文
(12).哪些方法解决TIME_WAIT状态过多
保证由客户端主动发起关闭(即做为B端)
关闭的时候使用RST的方式
对处于TIME_WAIT状态的TCP允许重用
2.操作系统
(1).虚拟内存
三级页表
(2).进程和线程
https://blog.csdn.net/zhou753099943/article/details/51771220
线程和进程如何切换:https://www.cnblogs.com/kkshaq/p/4547725.html
协程切换快的原因 只是在用户态 不涉及内核态 只涉及寄存器 没有私有栈。
(3)线程通信方式:
互斥锁 信号量 条件变量
(4)epoll 内核实现
实现:红黑树加链表 红黑树添加删除事件 内核中断发生事件后会回调添加到链表中,查询时返回链表中的事件。
epoll是线程安全的,如果当前线程阻塞,管理的epoll_fd其他线程加入socket且处于ready状态 线程会不再阻塞。
如果是删除socker 结果未知 有的unix会返回socketfd是就绪,除非删除之后立即使用。但是后续操作会失败(bug行为
(5).惊群问题
简单来说就是有多个线程在等待同一个事件,事件发生后,多个线程被唤醒,但是只有一个线程处理事件。其他都会继续等待。
linux内核2.6版本之后解决这个问题,只会唤醒一个。网上看见有人说其实是假处理。
(6).进程间传递文件描述符
使用匿名Unix域套接字,即socketpair()和sendmsg/recvmsg来实现。
(7).select poll epoll
select:轮询,大小有限制1024 每次将所有描述符从用户态复制进内核态
poll:轮询 大小无限制 每次将所有描述符从用户态复制进内核态
epoll:返回链表中的元素 链表 + 红黑树 红黑树管理插入删除 链表用来接受回调函数返回的事件
3.C++
(1).分配空间 malloc:
小于128k调用brk函数分配 由链表管理的内存 大于128kmmap函数分配文件映射区
(2).
静态多态和动态多态:
静态多态 函数重载 编译期确定
动态多态 虚函数 定义时在数据的头部 sizeof 当前类的虚函数只会占用一个指针的空间
作用 确定类型装换之后调用的函数为原先类型的函数。一般接下来就会问你虚函数相关的。
(3).unsigned
存储首位是不是符号位,有符号数 补码运算 无符号不用
(4).引用和指针
引用:别名 不占用空间 只是声明没有定义 必须初始化 不可以空 不可以指向其他变量
指针 :变量 有空间 声明和定义可以分开 可以不用初始化 可以为空 可以改变
(5).右值引用 https://www.jianshu.com/p/d19fc8447eaa
用来延长生命期
可用于实现移动语义 减少不必要的内存拷贝。需要移动构造函数和移动赋值函数。
(6).std::move
std::move函数可以以非常简单的方式将左值引用转换为右值引用。
(7).内存管理
堆,栈,自由存储区,全局/静态存储区,常量存储区,代码区
堆:用于系统分配内存,malloc从堆上分配内存,小于128k用brk函数,大于用mmap函数从映射区分配。
栈:函数运行时,创建变量,结束是释放,高效,但是容量有限。
自由存储区:用new申请的内存。
全局/静态存储区:程序编译时就分配好的,例如全局变量,静态变量。
常量存储区:存放const常量,不可改变。
new和malloc区别(略)
malloc brk函数如何管理内存(略)brk是将数据段(.data)的最高地址指针_edata往高地址推 https://www.cnblogs.com/vinozly/p/5489138.html
(8).动态链接和静态链接
简单来说静态链接会在每个可执行文件内产生一个副本,浪费空间。但是执行速度快。动态链接只有一个库,不会有多个副本,节省空间。更新是只需要更新原来的目标文件。无需将所有的程序重新编译一遍,因为动态是每次执行时链接,所以耗时。
q:静态库的源文件被修改会有什么结果
4.大数据
(1).32位1e9求中位数
当时思路:分组 例如 0-1e8 1e8-2e8…确定是哪组 然后重复这个行为
5.项目
(1).介绍一下libco 如何实现,为什么高效,有什么特点。
(2).为什么用这个 为什么快 有没有测过
别人介绍/吹优点 不用切换内核态和用户态 libgo 1个切换24ns 1000个切换 27ns golang 75/95
6.算法
(1).整数:
求有多少个和为100 不重复 sort 双指针 复杂度 nlogn
可以重复 例如0 100 统计有多少个100 多少个0 最后计数 注意50
(2).bfs不用函数 就是队列 dfs是栈
(3).二叉树左右切换 :
dfs的时候 更换一下left和right就可以了