微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站。(关注公众号后回复”Java“即可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源)
微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站。(关注公众号后回复”Java“即可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源)
**本文里的面经内容全部来源于牛客网,作为秋招备战复习与查缺补漏时使用。里面部分面经有我的注释和想法,以及部分解答,不一定正确,大家可以查询补充。**
作者:牛客5143046号
链接:[https://www.nowcoder.com/discuss/89164?type=2&order=3&pos=25&page=1](https://www.nowcoder.com/discuss/89164?type=2&order=3&pos=25&page=1)
来源:牛客网
腾讯提前批一面
Tcp如何实现可靠传输
如何处理syn flood
Os如何实现内存管理
进程间调度和上下文切换怎么实现
系统调用或者说中断的过程
软中断 硬中断
内存延迟分配怎么实现的
了解vfs吗
了解云计算,虚拟化吗
内存分配的系统调用是什么
Linux里的Rcu知道吗
Linux里有哪些锁
有哪些自旋锁,分别是怎么实现的
Linux的地址空间布局是怎么样的
为什么内核映射到每个进程是一样的,如果每个进程的内核映射是不一样的会怎么样
还有一些,实在想不起来了 一直在虐操作系统,简直懵逼
作者:牛客5143046号
链接:[https://www.nowcoder.com/discuss/89164?type=2&order=3&pos=4&page=0](https://www.nowcoder.com/discuss/89164?type=2&order=3&pos=4&page=0)
来源:牛客网
腾讯提前批一面
Tcp如何实现可靠传输
如何处理syn flood
Os如何实现内存管理
进程间调度和上下文切换怎么实现
系统调用或者说中断的过程
软中断 硬中断
内存延迟分配怎么实现的
了解vfs吗
了解云计算,虚拟化吗
内存分配的系统调用是什么
Linux里的Rcu知道吗
Linux里有哪些锁
有哪些自旋锁,分别是怎么实现的
Linux的地址空间布局是怎么样的
为什么内核映射到每个进程是一样的,如果每个进程的内核映射是不一样的会怎么样
还有一些,实在想不起来了 一直在虐操作系统,简直懵逼
作者:给个offer养家糊口
链接:[https://www.nowcoder.com/discuss/76678?type=2&order=3&pos=49&page=1](https://www.nowcoder.com/discuss/76678?type=2&order=3&pos=49&page=1)
来源:牛客网
感觉凉凉。。
1,讲项目
2,项目用到了redis,讲一下redis的主从复制怎么做的。。讲了挺久的。。
aof和rdb两种同步方式
3,写代码,去掉字符串中的空格空格,C语言实现(虽然写出来了,但是面试官说4行代码就能写出来这个。。)(2年没写过C和Cpp了崩溃。。)
4,如何把一个文件快速下发到100w个服务器(不会)
(面试官之后说你可以想想迅雷是怎么做到下载速度那么快的)
p2p的下载,分发文件到整个网络中,每个机器既能上传又能下载
5,如何判断一个图是否连同?(开始说DFS,面试官说不满意,后来说并查集)
dfs判断节点个数。并查集看是否所有节点的根节点是否能够相同
最后面试官要我加强一下C和Cpp。。
欢声笑语打出GG,我的BAT梦。。秋招再见了。。
作者:给个offer养家糊口
链接:[https://www.nowcoder.com/discuss/75986?type=2&order=3&pos=145&page=1](https://www.nowcoder.com/discuss/75986?type=2&order=3&pos=145&page=1)
来源:牛客网
我猜我是凉了。。
面试官是个挺严肃的小哥。。自我介绍和项目介绍也没有。。擅长的东西基本上都没问。。
题目不是先后顺序的。。想起来就补充。。
1,写SQL
2,左连接
3,TCP和UDP的区别
4,1000w个整数排序,范围0到100w,8g内存
MapReduce
5,网络的4层结构?TCP协议属于哪一层?TCP四次挥手的过程?最后等待关闭连接要多长时间?(时间真忘了。。)超时重传是怎么做的?ACK序号是表示已收到的序号吗?(卧槽我说的是的。。没理解他想问的是重传这块。。)
2msl。
ack是表示返回已收到的序列。
超时重传是对每个序列做一个计时器,然后如果没有收到ack则说明超时,重传
6,HashMap解决冲突的方法,Java里面怎么实现的
链表和红黑树
7,设计题,给每个组分配不同的IP段,怎么设计一种结构使的快速得知IP是哪个组的(开始想直接NAT协议搞一搞每个IP一个组的。。面试官说场景不对是给每部分的IP分组。。想用Trie树,面试官让我再优化一下。。)
b+数,每个树节点保存一个段
8,非递归完成二叉树的先序遍历(差点没写出来。。用的左神教的Morris遍历。。)
先序用栈
中序用栈
后序用两个栈
9,什么情况下会发生死锁,解决策略有哪些?
1 独占资源
2 依赖对方资源
3 循环依赖
4 不能剥夺。
预防
避免
检测解除
10,Java怎么进行垃圾回收的?什么对象会进老年代?垃圾回收算法有哪些?为什么新生代使用复制算法?
11,讲一讲Java里面的final关键字怎么用的
12,重载和重写的区别?相同参数不同返回值能重载吗?
不能
13,讲一下快速排序的思路?
最后问了问腾讯真的要Java么。。面试官说他们是腾讯云的,语言不怎么重要都要写的。。
其它的记不得了。。想起来再补充吧
作者:MeiduiQing
链接:[https://www.nowcoder.com/discuss/75868?type=2&order=3&pos=158&page=1](https://www.nowcoder.com/discuss/75868?type=2&order=3&pos=158&page=1)
来源:牛客网
西安腾讯后台一面 挂经
面试官高级大佬,穿着拖鞋和短裤面试,看到面试官抖腿就有点虚。
全程大量手写问题:
手写快排
手写,创建一张用户表
create table A not exist {
id, int(3), not null, primary key;
name, varchar(20), not null;
sex, tinyint(1);
}
写一个类,修改刚才的用户表
alter table add column(address, varchar(30))
alter table delete column(address)
写出你熟悉的Linux命令
文件:ls ll -a la
进程和文件:ps,top,df,du,pstree
网络:netstat,ping,curl,traceroute
文本:cat,vi,wc,grep,awk,sed,head,tail,more,less,
查找:whereis find -n locate which
权限:chmod chown 777 su sudo
定时任务和后台执行:crontab nohup &后台执行
写出你熟悉的JVM命令(面试官提示:字节码 JStack,自己没反应过来)
jstack,jmap,jstat,jmat,jps,jvisualvm
编辑器怎么deBug
怎样查看一个Java进程的使用情况(关于deBug,在编辑器上敲指令被追问很多)
jps看进程,可以jstack看线程的调用栈,运行时可以跟踪线程的堆栈结构。也可以通过visualvm
JUnit知道吗,写你知道的命令
Assert.assertEquals
Assert.assertTrue
mock,before,after。
写你知道的Git命令
git init
git pull
git fetch git merge
git add
git commit
git push
git reset --hard
git stash git stash pop
手写单例模式(光说双加锁了,被指出来有地方写错了)
volatile修饰单例
1 判空
2 加锁后再次判空
3 实例化
写你用过的jar包
rt.jar
hibernate.jar
spring-mvc.jar
spring-context.jar
spring-aop.jar
redis-client.jar
fastjson.jar
spring-boot-starter.jar
简单将了一下毕设用的技术,GG
你的职业规划是什么
已收获好人卡,还是要滚去学习了
作者:名字不给看
链接:[https://www.nowcoder.com/discuss/75533?type=2&order=3&pos=190&page=1](https://www.nowcoder.com/discuss/75533?type=2&order=3&pos=190&page=1)
来源:牛客网
具体几面记不清了,大概问了:
springioc,aop,mvc
,分布式存储架构
一般存储使用raid冗余阵列或者SSD快速磁盘。
分布式存储方案
1 块存储 直接对磁盘进行裸盘映射使用,甚至不安装文件系统,使用起来比较麻烦。
2 文件存储,基于文件系统使用存储,通过网络协议访问,比如ftp。一般是单机的存储系统。
3 对象存储,包括控制节点和存储节点,控制节点存储元数据,存储节点存储数据,一般通过api使用。类似hdfs,结合块存储的速度和文件存储的易用性。并且支持并发读写
,异常,
请求失败怎么办,
重发
加锁失败怎么办,
轮询cas
回滚失败怎么办,
记录日志,重试
加密算法,
1 md5,sha摘要算法,非对称加密
2 rsa是对称加密算法,有公钥私钥之分,比较复杂。
间隙锁(可重复读有没有间隙锁,你确定?),
可重复一般不能避免幻读(但是mysql中可以,它使用了gap lock+行级锁的加强版:next key lock来避免幻读)
序列化则是加表锁。
当然使用mvcc机制也可以解决这个问题
mvvc,存储引擎,
b,b ,红黑树,
三次握手四次挥手,进程线程区别,
进程通信,jvm内存模型,gc机制…
祝各位好运。两次二面挂,已绝望。
作者:燕大咸鱼干
链接:[https://www.nowcoder.com/discuss/75171?type=2&order=3&pos=248&page=1](https://www.nowcoder.com/discuss/75171?type=2&order=3&pos=248&page=1)
来源:牛客网
1 、先自我介绍,然后看我简历问我通信的为什么通信的选择做互联网?(我能说是因为钱多吗?当然不能,我就说互联网发展前景好,然后两人简单聊了一下)。
2、然后问我语言、计算机网络、数据结构、操作系统哪个比较擅长?(我答语言吧)
3、接着问我C语言中的内存分配,malloc函数?
4、谈谈Java中的内存模型?
5、讲一下你对多线程和多进程的了解?
6、为什么是三次握手,两次可不可以?
7、窗口滑动和拥塞控制?
8、问了一个操作系统的东西,没太听懂,我就直接说我不知道!
9、用代码写一下如何求二叉树的最大深度?
先序遍历求高度
作者:做一个白日梦
链接:[https://www.nowcoder.com/discuss/75109?type=2&order=3&pos=258&page=1](https://www.nowcoder.com/discuss/75109?type=2&order=3&pos=258&page=1)
来源:牛客网
二.腾讯
腾讯23号内推的,结果没收到提前批电话,最后通过笔试得到的面试机会,不过因为自己数据结构这块确实太菜了,二面挂
一面:
一面过的出奇的轻松,大概因为面试官不是做Java的,面试官就让我介绍了下项目,然后让我说个自己学过的最难的数据结构。。。没说出来,就让我走了,结果第三天收到复试通知
二面:
1.介绍项目
2.有一个页面能同时展示两个广告,现在有五个广告,设计算法使五个广告展示概率为1:2:3:4:5
搞出一堆数,按比例放,然后轮询展示
3.有25匹马,五个赛道,用最少比赛次数将25匹马排序
链接:[https://www.nowcoder.com/questionTerminal/e07d8e0df93b4f6b93a3fadbe72f2c7c](https://www.nowcoder.com/questionTerminal/e07d8e0df93b4f6b93a3fadbe72f2c7c)
来源:牛客网
毫无悬念,一匹马只有跑了才能看出其速度,25匹马至少都跑了一次,最少五轮,且每轮能排出名次;由于最终只要最快的三名,顾每组只有1、2、3有意义继续比下去,4、5名直接淘汰。每组的3有意义的前提是该组的2就是总排名的2、1就是总排名的1,每组的2有意义的前提是该组的1至少第二;归根到底还是看每组第一的情况,故5个第一比一次,第一就是总的第一;第四、第五及其所在的组全部被淘汰;故第一的组的二、三名,第二的组第一、二名;第三的组的第一名比最后一次,前两名就是总的二、三名;共七轮。
a1,a2,a3,a4,a5;------>a1,a2,a3;
b1,b2,b3,b4,b5;------>b1,b2,b3;
c1,c2,c3,c4,c5;------>c1,c2,c3;
d1,d2,d3,d4,d5;------>d1,d2,d3;
e1,e2,e3,e4,e5;------>e1,e2,e3;
a1,b1,c1,d1,e1;------> a1 ,b1,c1
a2,a3,b1,b3,c1;------> a2,a3 ;
作者:anyco
链接:[https://www.nowcoder.com/discuss/75031?type=2&order=3&pos=268&page=1](https://www.nowcoder.com/discuss/75031?type=2&order=3&pos=268&page=1)
来源:牛客网
一面
①项目中,redis在项目中用来干什么,基于什么考虑。讲了频繁访问的数据放到redis中,还有拿redis做异步任务队列。
②单机redis有可能挂掉,解决措施。
1 单机做持久化,主从部署
2 哨兵或者集群
③集群redis挂掉的话,解决措施。讲了把数据访问直接转到mysql(面完想了一下,是不是最好加一个异步任务队列来数据库操作)。
整个集群挂掉只能异地容灾了啊
④redis挂掉了,然后现在恢复了,怎么做,redis挂掉的这段时间,你是把在mysql上存取数据,这样势必要同步数据到redis。但是同步这个过程你redis是需要被访问的,解决措施。然后我给了方案说redis和mysql完全同步之后,再拿redis访问。
1 同步后访问
2 增量同步
3 主从,写入主,访问从
⑤数据库分库分表,垂直和水平来分。如果某个问题数据暴增,讲了用分类来作为分库的依据。又给了场景,如果某类问题数据暴增,要怎么做。后面面试官说了基于预测,可以先做一些冗余的库。比如某类问题可能会有数据暴增,那可以对这个模块加冗余的库。然后冗余库接下去怎么用这个没听清楚(hash??)。
1 垂直分业务,水平分数量。
2 划分依据,比如id,时间戳,根据场景,比如某一个类。
3 分片的规则就是进行hash,取模等方式进行。
4 最好使用数据库中间件如mycat
⑥负载均衡。讲了应用集群,nginx。
nginx的7层负载和四层负载均衡
1 LVS的四层负载均衡,nat,只是改了目标ip而已,返回需要回到代理
2 lvs的二层负载均衡 用虚ip访问,修改mac地址,返回不需要回到代理
3 lvs的三层负载均衡 用虚ip访问,使用隧道技术,返回不需要回到代理
⑦nginx怎么去判断某台服务器的负载情况,然后转发请求。
应该是定时报告Nginx各个机器的情况,当然数据需要存在配置中心比如etcd中,服务器和etcd保持心跳,发送负载情况,nginx从etcd获取机器情况,可以支持机集群的伸缩。
⑧在nginx+10台服务器的集群中,某个服务器挂掉了,这个时候nginx怎么处理(这时nginx肯定不能把请求转到这个服务器,那要怎么办)。
和我刚才说的一样,使用etcd这样的服务注册中心即可。
二面
①java里面抽象类和接口区别。同步机制的方式。
②接口能不能直接执行方法。
③冒泡、快排、堆排。空间复杂度。
④tcp、udp区别。tcp粘包。
⑤八个球,有一个比较重的,给一个没有刻度的天平,怎么最快找出。
3和3称,相同再称,2次搞定
⑥怎么看因为工作换主语言。
⑦数据库分库分表。
⑧家庭情况、女票、互联网行业高压、腾讯文化、房价,足足聊了十几分钟
⑨个人提问环节,说了秒杀系统的设计,爆发性增长的数据给数据库带来的问题。
PS:全部面试走完,让师兄在内网查了,状态是offer报批中,也不知道是个啥状态。。
二面的问题可能会让你们比较惊讶。。。
作者:BugFree
链接:[https://www.nowcoder.com/discuss/74961?type=2&order=3&pos=284&page=1](https://www.nowcoder.com/discuss/74961?type=2&order=3&pos=284&page=1)
来源:牛客网
写在前面
面试官超nice,以一种聊天的形式跟你交流。上午10点10左右开始,11点40结束。总的来说,基础还可以,但是有些东西的底层学的还是不够深。
问题回忆
1. 自我介绍
1. 怎么平衡科研与项目开发之间的时间
1. 说说你在项目里做了哪些工作
1. 简历里提到了代码重构,为什么重构?怎么重构的?
1. 了解网络编程吧?说说TCP、UDP的区别,最主要的区别是什么?什么时候用这两者?为什么握手三次(而不是2次、4次)?为什么挥手四次(而不是三次)?
1. 做一道题吧:有100盏灯,编号依次为1,2,3.100,电灯全部关着。现在来了100个人,第一个人把所有的灯开关按下;第二个人隔一个灯按下(2,4,6...);第三个人每隔两个灯按下(3,6,9...).第100个人隔99个灯按下(100),最后还有几盏灯,那几盏灯亮着?
1. 我看你用过SVN和git,说说它们的区别。
1. 知道哈希吧,说说哈希算法
1. 知道哈夫曼编码吗?我说本科时学过,他说那行,给你一堆数,构建一棵哈夫曼树。。。写完后,他笑着说,这题给你出简单了。。。
1. 你有没有什么想问的?(常规三问:您是哪个部门的,做什么?对我今天面试的表现,简单评价一下?对我今后的学习或者工作提些建议?)
作者:﹏*安分
链接:[https://www.nowcoder.com/discuss/74819?type=2&order=3&pos=312&page=1](https://www.nowcoder.com/discuss/74819?type=2&order=3&pos=312&page=1)
来源:牛客网
1.自我介绍
2.介绍一下项目,项目架构图画一下
3.数据库事务,项目中那里用到了事务
4.数据库隔离级别
5.linux系统用过没?没用过
6.java的网络编程,java中socket的使用,刚开始纳闷为什么狂问我java网络编程方面的东西,后来才知道腾讯基本用java来做网络编程,其他的都是用c 来实现。
7.udp和tcp的区别,tcp的流量控制,拥塞控制,tcp怎样保证可靠传输
8.http和https的区别,https是如何加密的,它的加密方式是怎样
9.今天又让我介绍区块链
10.java中的锁介绍一下
11.10亿个扣扣号,每秒有10万条请求查询过来,如何处理作者:﹏*安分
消息队列削峰,缓存查找,数据库集群
作者:少年已去
链接:[https://www.nowcoder.com/discuss/74814?type=2&order=3&pos=314&page=1](https://www.nowcoder.com/discuss/74814?type=2&order=3&pos=314&page=1)
来源:牛客网
发个面经,攒攒人品 一面 一面问的都比较基础,Java的四个特性,jvm内存空间,进程与线程区别,hashmap底层,快排,索引等等 二面
1.c++stl库
2.c++的vector和map和java的区别等等c++相关
3.加密算法
4.innodb和MyISAM
5.数据库MD5加密方法的具体实现
6.三级范式
7.索引
8.数据库CAP
9.进程的结构
10.进程的调度
11.进程通信方式
12.手画TCP三次握手四次挥
13.http协议
13.手写快排
14.堆排
16.二叉树,字典树,红黑树的自旋
17.并发,自己做业务选怎样的进程控制方式
18.socket
19.xms调优
20.哈希算法 总结: 腾讯主要是c++的,java招的很少,所以二面会问你好多c++相关的,根本不会,二面面试官也问了如果过了,能不能转c++,总之凉凉,但是面腾讯收获还是挺大的,面试官会给你一些很好的建议。
作者:johnnydd
链接:[https://www.nowcoder.com/discuss/74787?type=2&order=3&pos=319&page=1](https://www.nowcoder.com/discuss/74787?type=2&order=3&pos=319&page=1)
来源:牛客网
现场面的,一进去看到面试官我就蒙了,同学上午面的,他的面试官是个年轻小哥哥,我下午,面试官看着40来岁,我当时心就凉了一节(这肯定是个部门老大什么的吧...),然后全程表情很严肃,像是一直质疑我,我很纳闷,说到最后,我都有点不想去思考问题,只想快点结束
首先简单自我介绍,然后简单说了下项目,我项目用到了mycat,问我底层如何实现,不会,
问了我为什么用dubbo,他一直质疑是因为我的项目做的很大,一个人无聊做着玩什么技术也往上面放,
然后面试官的意思是我自己做的东西既然没有那么多并发量就不用考虑那么多技术,意思是要用一个东西要知道为什么要去用,跟他扯了半天真的不想扯……心里苦
然后问了Java虚拟机内存模型,四次挥手,还有个慢启动快重传,我这个网了……一下说成之前操作系统学过这个,我俩都冷场了一下……
问了linux进程相关的,
hashmap concurrenthashmap 内部实现细节,
然后还有触发器是什么,
问了个智力题,
8个球一个重给个天平,最少算几次,
然后就是千万的数据求前100个最大重复的,大学做过印象最深刻的事情,有什么想要问我的? 基本就是这,半个小时整,面完我心凉了
1
采用Hash+小顶堆
Hash就是为了统计每个数出现的次数,然后发生冲突的地方用个链表把它链接起来,在每个节点中存储一个含有data和count成员的结构体,data记录相应的数字,而count记录对应的数字出现的次数,这一步的时间复杂度是o(n).(注意这里虽然数字很多,但是因为会存在大量的重复数据,不用担心最后的空间会有10亿)
然后创建一个大小为100的小顶堆,然后将Hash表中前面100个非空的成员放入小顶堆中,然后将hash表中的其他数据和堆顶出现的次数比较,如果比堆顶出现的次数少,则丢弃当前数,如果大于堆顶元素的出现次数,则替换堆顶,然后进行堆调整,这一步时间复杂度是o(nlog100).
总的时间复杂度是o(n)+o(nlog100)
2
用一个bit数组 data[十亿]初始化为0 读取数据i,若 data[i] == 0 ,data[i]=1;
否则 记录用一个结构体记录i,并记录他的的次数。最后则可以 求出 出现次数最多的数整数
作者:SFISH
链接:[https://www.nowcoder.com/discuss/74718?type=2&order=3&pos=349&page=1](https://www.nowcoder.com/discuss/74718?type=2&order=3&pos=349&page=1)
来源:牛客网
先说下最遗憾的,叫写冒泡排序都能写数组溢出,非科班面对算法题真的紧张。凉凉。
面试官是做php的,我用java。
问了http和https的区别。
答: 后者是前者的安全实现,客户端发起请求时服务端会返回一个公匙,然后客户端根据公匙规则发送消息,服务端根据自己的配对密匙解密实现加密。
那公钥放哪里呢?
数字证书
答:请求头。(面试官笑,是这样吗?我说这一块我理解的不够深就跳过去了)
问: session和cookie讲一下?
session的出现是为了解决cookie存放本地而且量小的问题产生的,通过浏览器缓存的技术把需要的信息缓存,服务端就可以在同一应用中不同页面传递数据,我觉得服务端采用的是hash表存放的信息。
那怎么知道是哪个客户端呢?
这个刚忘讲了,服务端会发送一个id标识客户端。
sessionid
问:进程线程讲一下
进程由操作系统调控,线程由进程调控(忘了讲一下内核和用户线程的映射,太紧张了),就好像一个java程序就是一个进程,里面很多线程,比如生产者消费者模式,进程就像框架框住他们,生产者消费者就是两个线程,在这个框架里面生存,做资源交换。
问:那进程的通信呢?
我知道共享内存,还有管道和信号量就不太了解了(紧张,脑子有点空白),信号量我知道java并发包下的信号量,如果您需要我可以跟您讲。
问:线程怎么共享资源
(我其实很想讲java内存模型,但是面试官就这么不喜不怒我也不知道要不要回答这个)我以jvm为例讲一下吧,jvm里的堆就是一个公共区间,线程负责来取资源,这样就可以实现资源共享,如果您需要问原理,我可以跟您讲一下内存模型。(面试官又是java开发,所以我真不知道要不要把底层讲的很细)
问:讲一下反射机制(我提到spring的ioc就是反射机制,但是我说我不会spring写项目)
(面试官也知道反射机制的么)在类加载的加载阶段会产生java.lanag.class对象,而且初始化阶段jvm也规定由reflect包下的方法必须加载进来,这样就可以通过class forname动态加载类获得对象和调用getclass获得class对象,然后再用newinstance方法获得对象,然后就可以了(又忘了讲类加载)
问:讲一下hashmap和hash冲突
1.7的时候用的是数组加单链表,1.8变成了红黑树(忘了讲初始容量和扩容问题,大佬的不怒自威太可怕,不知道该怎么),讲了一下取哈希值的改进,可以算的更快
(这里提一下,大家应该发现面试官都在问hashmap,因为java8的一个核心优化就是hashmap,所以多看看博客)
好像差不多就这么多,很伤心面试官没有问jvm和底层锁,不然我可以跟它就这个话题扯10多分钟)
总得来讲,我觉得冒泡排序我真的想自宫,为什么这个我都能写错???
反正我只是来见大佬的,一个遗憾就是问的大佬的问题大佬表示都不方便回答。
好了,今年java想找工作,就把自己当成全栈工程师来努力吧,毕竟今年天下研发皆java,所以我当初是不是应该坚持一下走深度学习?
秋招再见!
作者:yunux
链接:[https://www.nowcoder.com/discuss/74614?type=2&order=3&pos=360&page=1](https://www.nowcoder.com/discuss/74614?type=2&order=3&pos=360&page=1)
来源:牛客网
刚现场面完一面,凉凉。。。。。。
走的内推,可惜时间投的比较晚,3.21号投的,结果3.30号才来电话,全程差不多聊了一个小时,问的很详细也很基础。
1、项目介绍,大约15分钟。
2、基础,大约15分钟。
2.1、Java Map结构?(脑抽了orz)
2.2、进程、线程区别?线程共享进程哪些资源?
同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢?
共享的资源有
a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
独享的资源有
a. 栈 栈是独享的
b. 寄存器 这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC
2.3、TCP三次握手,四次挥手?为什么三次?TIME-WAIT状态?
2.4、Linux Socket相关。
2.5、Linux指令,查看一个进程打开哪些文件
lsof -p pid
lsof命令是什么?
可以列出被进程所打开的文件的信息。被打开的文件可以是
1.普通的文件,2.目录 3.网络文件系统的文件,4.字符设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链接
8.底层的socket字流,网络socket,unix域名socket
9.在linux里面,大部分的东西都是被当做文件的…..还有其他很多
怎样使用lsof
这里主要用案例的形式来介绍lsof 命令的使用
1.列出所有打开的文件:
lsof
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
2\. 查看谁正在使用某个文件
lsof /filepath/file
8\. 列出某个用户以及某个程序所打开的文件信息
lsof -u test -c mysql
10\. 通过某个进程号显示该进行打开的文件
lsof -p
3、数据结构和算法,大约25分钟。大多剑指原题。
3.1、二叉树,BFS、DFS,Python怎么实现?口述代码(没讲好gg)
3.2、字符串最长升序序列,动态规划。
dp
3.3、数组中数字出现的次数,一个数组中除了两个数字只出现一次,其他的都出现两次,找出这两个数字?位运算。
3.4、Top-K问题,海量日志数据,提取出访问次数最多的那个IP。分而治之+Hash+堆。(思路算对,但是没回答好orz)
分治,hash,堆
4、闲聊,大约5分钟.
结束后没收到二面,清明做笔试,性格测试。
* * *
今天4.15一面,去了扫码签到,很快就上去面试,面完很丧。。。。。
全程25分钟左右,自我介绍,然后项目介绍,Java多线程同步怎么做?(没回答好orz),会不会C++(答好久没用了,现在用Python和Java,回答完后就感觉面试官没啥问的了),
动态规划了解不?说一下快排,说完就结束了。。。。。凉凉。。。。。唉。。。。。没说留简历也没下次面试的事,感觉很丧,都没怎么问问题,感觉面试官兴趣不大。。。。。悲伤的故事。。。。。
作者:家有二呆
链接:[https://www.nowcoder.com/discuss/74046?type=2&order=3&pos=426&page=1](https://www.nowcoder.com/discuss/74046?type=2&order=3&pos=426&page=1)
来源:牛客网
笔试后面试
一面,先自我介绍,然后做了两题手写代码(手写代码实现查询链表的倒数第1000个节点,一个struct,里面有多种类型变量,给一个指针指向这个结构,然后让我算指针偏移后的地址),
一题算法思考(1000万个关键字,每个关键字小于等于50字节,求前K个热词,内存为1M)。
分治+堆排序
接着开始对着项目问,问了一下我Reactor模式,RPC框架原理。一面过。
io多路复用,异步事件
远程调用转化为本地调用
二面,上来先自我介绍,接着对着我项目问我springboot的aop,动态代理,问我日志的时候,由于自己忘记怎么切日志,有点忘了。
接着面试官站起身来, 拿了一题算法题。我定睛一看,实现12306余票查询的关键数据结构与算法。
车次 + 时间:车厢 + 车座。两层hash+一层数组即可。
当时就感觉凉了,耐着性子和面试官讨论,面试官引导我这个和座位有关,慢慢 写了个简单版的。
面试官很nice,虽然我写的渣,也没说我什么,然后就问了一下我微服务,有什么缺点,网络这块,问的很深。
划分非常细,分布式问题要考虑的比较多。
对协议栈这块一定要有 思考,背那种tcp和udp的区别于应用,可能面不过TEG。
物理层,要么是电磁波要么是物理缆线。
链路层,基于物理层封装成帧,mac寻址,局域网可达
网络层,冲出局域网,全世界联网,路由
传输层,解决网络层的丢包,失序,低效等问题
应用层让浏览器发挥效果,让web应用成为现实
面完后,脑子都有点迷糊。如果大家投了腾讯的后台,如果又是TEG面的话,大家一定要复习好基础, 要有架构思维,一定要对不同的技术的优缺点能说个七七八八。
基本会问你技术对比,优势劣势。对了,还问了我如何学习新技术,这个大家一定要准备。
查看状态,进HR面了。
4月19 HR打电话,确定了信息,问是否愿意接受offer,答曰:愿意。
春招到此结束,祝各位都收到自己想要的offer。
作者:f*Snow
链接:[https://www.nowcoder.com/discuss/73842?type=2&order=3&pos=444&page=1](https://www.nowcoder.com/discuss/73842?type=2&order=3&pos=444&page=1)
来源:牛客网
1.创建对象的方法
2.序列化
3.线程池
4.http状态码,http头
5.证明一个数是2的n次方
1、通过循环除2;这种方法不值一提,略过;
2、针对32位/64位只有有限个 2 的N次方的常量值,逐个进行比较;额。。。这个也略过;
3、通过正则表达式进行文本匹配,判断是否2的后面都是 0 ;这个绕得更远了。。。
最后,有一种最简洁优雅的写法:(value & (value -1)) == 0;
喔,的确是简洁优雅!!!
6.堆排序
8.八大排序特点
9.链表的倒数第k个节点
答完了,面试官说挺好的基础还不错,晚上查状态还是挂了,想想可能细节回答的不好
作者:Masquerade°
链接:[https://www.nowcoder.com/discuss/73411?type=2&order=3&pos=480&page=1](https://www.nowcoder.com/discuss/73411?type=2&order=3&pos=480&page=1)
来源:牛客网
昨天收到腾讯的面试通知(考完腾讯的笔试以为挂了,就没抱希望,没想到还有面试机会)
给大家分享一下,就当攒个人品。
第一部分,远程笔试。
面试官发了个网页链接过来,给45分钟完成,网站是collabedit。
有6道题,挺简单的,十多分钟就写完了。
1、char *s1, const char *s2,删除s1中s2出现过的字符
2、删除单项链表中重复的节点 (1 2 2 3 3 9) -> (1 2 3 9)
3、求二叉树的深度
4、单链表判环
5、判断一个数是不是回文数
6、求一个数组的最长连续子序列
第二部分,电话面试。
先看了下我的答案,找了几个小的bug(root没有判断NULL,链表头节点没有判断NULL,还是不够严谨啊)
然后问我有没有别的解法,就算过去了。
然后聊项目,因为没什么项目,所以聊的不多,哎,为什么你们可以这么厉害,渣渣求一条活路。
然后问问题。
1、网络了解吗?讲一讲TCP协议的三次握手,为什么要有三次?(紧张,说得不够清楚,答的不好)
2、了解Linux吗?epoll了解吗?
yes
epoll create 红黑树
epoll ctl 插入节点
epoll wait 就绪链表
3、数据库了解吗,用过哪些数据库?
4、这些知识是你在网上看的还是课上学的?
5、还有什么问题要问我?
然后让面试官评价一下,其他的还行,经验不够足。
反思一下:
1)第一次面试,有点紧张,还是要多锻炼,把自己充分展示出来。
2)知识面不够广,还要多学习啊!
3)通知太晚了,准备不够充分。
4)多实践。
问的问题这么少,时间这么短,应该是挂了,给自己点一首凉凉,以后好好搬砖好好学习。
然后,各位加油。
/*********************** 后续 *************************/
收到二面通知了,但是明天没空,点了时间不合适,不知道HR会不会打电话再约时间。
作者:挽歌
链接:[https://www.nowcoder.com/discuss/73302?type=2&order=3&pos=489&page=1](https://www.nowcoder.com/discuss/73302?type=2&order=3&pos=489&page=1)
来源:牛客网
成都腾讯现场面试,今天上午9点半,签到等了一会儿就进去面试。
1\. 自我介绍(面试官是写 C++ 的),然后简单说了两句项目
2\. 什么是分布式
多节点部署,分布式存储,分布式计算,分布式部署
3\. 我看到你项目里面用了 Redis,讲讲 Redis
4\. 让你设计一个 Redis 或者说一个 cache,怎么做
map。
5\. 给你一段逻辑连续的内存,你怎么设计(全程怼我怎么保证充分利用空间和动态分配)
压缩链表
6\. 讲讲常用排序的优缺点,应用场景
7\. 手写快排
8\. 让你设计一个视频点播,你怎么设计这个模块
视频分类,视频列表,播放使用udp
这个一开始我写的是功能模块,后来面试官明示说从接入、存储...来谈
9\. 在上面那个我说道了拥塞控制,就开始问 TCP 拥塞控制机制
10\. 既然你的设计就是类似 TCP(我用的 UDP 来设计),为什么不用 TCP
慢,需要建立连接,重发,保证有序等,实际上不需要
11\. 逻辑题:6个赛道,36匹马,找出 top 1(如果是 top 6 呢)
1 6次跑完还剩6只,再跑一次
2 很麻烦
12\. 兴趣爱好
13\. 你自己的优缺点
总共面了一个小时,两个设计怼的太久了,细节扣的很仔细。大家简历一定不要留坑!
作者:初生小牛不怕虎
链接:[https://www.nowcoder.com/discuss/71195?type=2&order=3&pos=653&page=2](https://www.nowcoder.com/discuss/71195?type=2&order=3&pos=653&page=2)
来源:牛客网
记性不大好,只能想到一部分了,后面想到什么再补充吧,暂时分享给大家这些,祝大家好运!
一面:
主要写Java是吧
内存模型描述一下
并发控制,锁怎么管理的
balabala不太记得了
手撕代码:
单链表倒置
二分法查找排序数组
二面:
介绍项目
自己负责的部分
做这个项目感觉有什么收获
手撕代码:
求两个集合的交集和并集
括号匹配,带优先级的小括号中括号大括号
30瓶水,其中有一瓶毒药,小白鼠喝了毒药之后一天会死,求只有一天时间,用最少的小白鼠找出毒药
输出a~z全排列
全排列算法或者dfs
HR面:
自我介绍
项目主要做的啥?自己负责的部分?
觉得最不好解决的几个问题?怎么解决的?
家是哪里的,爸爸妈妈都是干嘛的
还投了别的什么公司吗?偏向于哪个?
找实习比较看中什么?
你还有什么问题吗?
作者:袖手旁观1111
链接:[https://www.nowcoder.com/discuss/70644?type=2&order=3&pos=721&page=1](https://www.nowcoder.com/discuss/70644?type=2&order=3&pos=721&page=1)
来源:牛客网
3.20 一面
自我介绍
全程聊项目,面试官会打断提问
面试官介绍自己部门(IEG)
3.27 二面
自我介绍都没有,面试官甩过来链接,直接开始写代码。
两道都是leetcode原题,medium
227\. Basic Calculator II
81. Search in Rotated Sorted Array II
旋转数组用二分
第一道只讲了思路没写出来,第二道写出来了
一小时后状态变成不合适,全程一个后台开发的问题都没有问。。。我怀疑面了假的后台岗位。。。
作者:这就是我的逃跑路线,jojo!
链接:[https://www.nowcoder.com/discuss/70311?type=2&order=3&pos=778&page=2](https://www.nowcoder.com/discuss/70311?type=2&order=3&pos=778&page=2)
来源:牛客网
腾讯:
前言:可以说是个传奇了,之前根本没报因为听说没java,后来群里有人说自己报了人家问他java了,心想着锻炼下面试,结果一直没消息,内推快结束了突然约我面试,还是现场。。走完一二三面跪在了三面
一面:面试官说自己这边主要后台用php和go,我说进来再转也行,面试官说好吧。。。
问:网络协议,三次握手挥手
答:blabla大概说说
好了,问题结束,面试官掏出一个本本让我开始撕算法,开启手撕算法加练写字的奇妙旅程
算法一:两个有序数组合并取中位数
我:balbla写写写(面试官发呆中)
我:写完了,您看看(自己看了眼字真的难看,自己都看不懂)
面试官:。。。。。。横看竖看左看右看,。。。好吧。。。。
1 合并完再求
2 合并过程中第n/2个数就是中位数
算法二:给定二叉树显示最右边的那一列节点(左神的书还是剑指offer的原题)
我:blabla写写写
面试官:你这写的是不是不对啊
我:。。。还真不对,改。。。写好了
面试官:emmmmmmm(内心os:这人真的不是外星人么,这啥语言?)
我:我所下思路,层次遍历先右后左,存个temp值表示当前层数,第一次加的是最右边的
面试官:好了,你等会
层次遍历只打印最右边的即可
二面:
问:自我介绍
问:aio nio bio了解么?
答:了解,blablabla
问:select epoll区别
答:blablabla
问:同步异步,阻塞非阻塞的区别
我:blablabla
问:并行和并发的区别
我:blablabla
面试官突然拿出一个本,没错就是刚才一面的那个,翻了一面让我写算法
算法三:写个hash
我:??????
面试官:实现个hashmap,就最简单的那种
我:。。。照着jdk1.7的hashmap写了个,主要写了put
面试官:emmmmmmmm,下一个
算法四:一个树,找最长路径,说思路就行了(估计看我字难看)
我:递归找树深度稍微变下
面试官:今天到这,如果还有面明天通知
递归找深度存最大值
三面:领进去前说是总监面,让我在办公室外面坐会等了会让我进去了(ps:总监办公室窗子外面视野真好)
问:自我介绍
我:。。。。。
问:好了,拿出两张纸开始算法吧
我:。。。。
算法五:链表反转
我:。。。。。。。
算法六:找环入口
我:。。。。。。
好了撕算法结束
问:大量int,内存装不下,去重
答:之前没背过,现说的一方法,面试官不满意
面试官:今天到此结束
总结:谢谢腾讯面试官抽出时间给我这个语言不对口基础也不扎实的菜鸡面试,还给我练手撕算法的机会,一开始紧张的一逼,后面不紧张了,字也写到能让人类勉强看懂的地步了,收获很多。
网申
一面:
语言不合,撕算法
算法七:两个数组去重,分别根据无序和有序说下,写个有序的算法
算法八:给个式子,括号匹配,然后括号去了怎么算出结果
出酒店挂
总结:至此腾讯算法课堂正式结束,总共8道算法,秋招再见
作者:雄关漫道1
链接:[https://www.nowcoder.com/discuss/70129?type=2&order=3&pos=792&page=1](https://www.nowcoder.com/discuss/70129?type=2&order=3&pos=792&page=1)
来源:牛客网
【腾讯 - 微信&腾讯视频 - c++ - 已挂】
微信一面 - 暂无后续:
1.TCP三次握手和握手时client&server的状态,为什么不是两次握手;
2.syn flood了解吗? DDOS?
洪泛攻击,分布式请求攻击
3.select&epoll是什么?并发度各有什么限制? epoll为什么快?
就绪列表,根据场景
4.epoll的水平触发和边缘触发?
水平不断通知io就绪,边缘触发只有一次通知
5.进程间通信?哪个最快?为什么?
共享内存,不需要额外机制
6.XSS原理?
跨站点脚本注入。嵌入js代码导致页面被恶意篡改和重定向
7.为什么要用https?http的缺点?
http明文传输不安全,https加密传输
8.https建立连接的过程?
数字证书,生成随机数,公钥加密,私钥解密,以后都用该随机数进行对称加密
9.非对称加密算法了解哪些?
rsa
10.简单聊了聊项目。
腾讯视频一面:
1.TCP三次握手四次挥手的11个状态;
2.C++用过吗?说说函数重载;
3.函数重载的原理;
4.extern c的作用;
5.一致性哈希的性质,算法;
6.说说快排,时间复杂度是多少,怎么算的;(tips:设快排复杂度为T(n),由于一次partition复杂度为O(n),有 T(n) = 2T(n/2) + O(n))
7.红黑树知道吗?说说;
8.聊项目;
腾讯视频二面 - 已挂:
加微信面,拍了张试卷,让半小时内手撕代码,悄悄泄题
![](C:/Users/%E5%91%A8%E6%9D%B0%E4%BC%A6/AppData/Local/YNote/data/xll1025@163.com/213e0c824fc048a4b2d64074055b7283/052798f2f2e7.png)
1 lru缓存。过期删除。
2 删除空格,左移即可,或者计算空格数,然后从右到左把字符串排好。
3 使用长度为26的数组,存储0和1,0对于无,1对应有,一共2的26次方种情况,然后打印
作者:吴祚煜
链接:[https://www.nowcoder.com/discuss/70021?type=2&order=3&pos=802&page=1](https://www.nowcoder.com/discuss/70021?type=2&order=3&pos=802&page=1)
来源:牛客网
聊一聊今天的腾讯实习面经吧。。然后211渣硕。。
很早就内推了腾讯身边的同学早就接到电话面试了我迟迟没接到以为凉凉了。
然后昨天晚上突然就到电话叫我去面试。
然后我是第一次面试。之前准备的也都是Java,投的是后台,就抱着必死的决心去面试了。
第一次去漕河泾,那块的整体工作氛围还是不错的。约的是下午2点,提早到了,面试官还在午休,然后就上去了。
去了之后在他们的茶水间的面的试,一边喝茶一遍面试,整体气氛很轻松。
然后第一个问题是:你会C++吗,你对C++了解多少。(不会,本科课程要求水平)
第二个问题:那先做一套笔试题吧
笔试题题目大致如下:
第一部分简答:
1、析构函数
2、操作系统内存管理
3、Linux指令
4、Tcp/ip
5、TCP协议
还有几题记不太清了
第二部分撕代码:
1、快排
2、堆排(大、小)
做完之后就开始正式面试。由于我表达了我不会C++(建议大家对于不擅长的领域不要硬着头皮回答,干脆说不会比较好)
问了许多网络、操作系统的内容,这部分内容我在复习Java时都准备了,问题不难,都答上来了。
然后做了2道数学题:
1、桶中取球排列组合问题
2、二进制问题,问题如下:
1000瓶水有1瓶水有毒,老鼠喝一滴就会死,但是需要一周毒发,请问最少需要多少老鼠多少时间才能找到那瓶有毒的水。
答案是10只老鼠1周,解法是十进制转二进制
然后就问项目。具体就不展开了。
然后问了一下什么时候能来实习。就把真实情况汇报了。
然后一面就结束了。
比较感谢面试官没有因为C++而直接把我拒掉,面试时也没有在C++这方面为难我,而且整个面试过程非常轻松愉快,整体感觉一面有点话痨,就感觉面试官是我的一个同学一样亲切,感谢面试官。
然后他让我等5分钟他去问组长。然后组长就来面试了,二面开始了。
组长首先了解家庭情况,学校学习情况。
然后第一个问题:了解Socket吗?用过吗?(很巧我最近的一个项目正好用过就回答的比较好,顺便把项目介绍了一遍)
第二个问题:你研究生的研究方向是系统搭建吗?(因为我有一个导师安排的公司实习是有系统搭建的部分,但是我的研究方向是图像分类DCNN,于是我跟他解释了我的方向以及我为什么要搭那个系统)
第三个问题:你深度学习图像识别成果?(论文写好已投SCI,审稿中,然后顺便把我的框架,数据集,方法,环境啥的都介绍了一下,中间把之前本科时做的一个相关项目也介绍了)
第四个问题:你对你未来职业规划
第五个问题:你最希望做什么工作(问我这个问题估计是因为我不会C++)
大概就记得这五个了,感觉主要问的技术方面不是很多,还是侧重之前的实习、项目还有研究方向相关。顺便了解了一下我的想法。
二面的时候在对面试官提问环节我对面试官问了很多问题,也是我想知道的,我还让他带我逛了一圈他们的办公室。
然后就约我明天复试了。
总结一下今天的面试体验,漕河泾那边整体工作氛围很好,茶水间很棒,两位面试官都很好,然后感觉可能一位就是我以后的同事或者导师,一位可能以后就是我的leader。
然后对于C++知识不了解的情况,第一位面试官就主动帮我圆,编程都是相关的,只要你有足够的学习能力就没有问题,然后说如果以后进来想做Java也有机会,公司也有项目需要Java。
然后说了很多对实习生的培养的东西,大概就是主要了解你这个人的整体水平吧。
最后攒一波人品祝我明天好运吧!
作者:牛陌王
链接:[https://www.nowcoder.com/discuss/69623?type=2&order=3&pos=844&page=1](https://www.nowcoder.com/discuss/69623?type=2&order=3&pos=844&page=1)
来源:牛客网
1、自我介绍
2、数据库使用的怎么样等等
3、数据结构
* B+树
* 红黑树
* 图的最短路径
* 等等
4、网络编程
* 高并发与异步的服务器怎么设计
网络io的话epoll大法好。异步就用回调模型呗,
高并发就要多线程开发代码。具体设计就是请求到达,处理,访问io,以及回复结果
* epoll后的套接字怎么存
红黑树+链表
* 等等
5、项目
面试的是搜索平台的面试官,说可能做的工作方向和你做的方向不匹配,凉凉~
作者:不稂不莠
链接:[https://www.nowcoder.com/discuss/68690?type=2&order=3&pos=953&page=1](https://www.nowcoder.com/discuss/68690?type=2&order=3&pos=953&page=1)
来源:牛客网
面试官背景:腾讯云平台部门
1. 自我介绍
2. 自己的项目介绍(下面的问题都是根据项目提问的)
(1) 腾讯云COS对象存储的原理
(2) 为什么用Restful
(3) 为什么Restful比传统的http好?
接口含义明确
(4) 还知道什么类似Restful的规则?
cap maven
(5) 用什么做接口数据传输(参数格式)?(json...)
(6) Redis的应用场景?
(7) 为什么不用memcached?和redis比较?
(8) 权限是怎么做的?(介绍shiro)(介绍数据库实现权限的设计)
(9) Redis用来缓存哪些信息?如果缓存的数据数据库更新了呢?
同步更新
(10) 用户的登录状态如何判断?Session过期问题?如何判断session过期?(这里感觉自己太依赖框架了)session是在哪一层面做的?
session可以设置时限,判断使用方法就行了,服务器层面,也就是内存
(11) Js的继承?.id和#id有什么区别?DOM对象是什么意思?
(12) 人生经历中记忆最深刻的困难或者事情?是怎么解决的?
3. 那我们现在来面基础吧好吧
(1) 进程线程了解吗?
(2) 线程里面有什么是独立的?
操作数栈,局部变量,寄存器
(3) 一个进程一定要有一个线程吗?没有线程的进程是什么?
不用
守护进程
(4) 协程是什么?
(5) 同步和互斥是怎么做的?
(6) 线程间的同步和互斥是怎么做的?
(7) 守护进程和僵尸进程,孤儿进程有什么了解?
1 孤儿进程是子进程未结束时父进程异常退出,子进程变成孤儿,init进程会认做他爹。
2 僵尸进程是子进程结束后,父进程没有显示发送通知,导致子进程的结构没办法被回收,变成僵尸进程,站用空间。
3 守护进程就是init进程,负责监控进程的状态,以及认儿子,杀死父进程等操作
(8) 系统出现僵尸进程,为什么产生和怎么解决?
init进程会杀死父进程或者回收僵尸进程
(9) 软连接和硬连接了解吗?
硬链接不同名文件指向同一个node,软连接只是节点中存储目标文件的绝对路径
(10) 硬连接和软连接删了,原对象会如何?
硬链接会删除文件,软连接不会
(11) 硬连接和软连接的底层原理?
硬链接不同名文件指向同一个node,软连接只是节点中存储目标文件的绝对路径
(12) Inode是什么?
文件的根节点,存储除了文件名之外的所有元数据信息。真正存储着数据所在硬盘地址的节点。
(13) 强类型和弱类型,静态类型动态类型是什么?
强类型如java,弱类型如Python
(14) TCP/UDP的了解?
(15) Tcp和udp的使用场景
(16) Tcp粘包
发送缓冲区和接收缓冲区处理不及时或者大小设置不当,导致粘包和拆包
(17) Tcp的time_wait (到这里我觉得面试官面不下去了)
(18) http1.0和1.1有什么区别
header,长连接,二进制
(19) https协议?原理?端到端中间的过程。
(20) 对称加密和非对称加密?
(21) Cookies和session的关系
(22) Cookies的最大保存时间
(23) Mysql索引的原理,底层是怎么存的?
(24) 主键和唯一键有什么区别?
(25) Varchar和char的区别?
Varchar动态决定占用空间大小,char固定
(26) UTF-8下面varchar能占多少字符?GBK呢?
不懂
(27) 说下你知道的排序,比较一下他们的优缺点,复杂度和应用场景。
作者:早就戒了。
链接:[https://www.nowcoder.com/discuss/77167?type=2&order=3&pos=55&page=1](https://www.nowcoder.com/discuss/77167?type=2&order=3&pos=55&page=1)
来源:牛客网
早上早早的来到了酒店,等候着面试。
“XXX,请去1607”。此时时间9.27
来到面试官房间,简单的握了手,寒暄几句就开始面了。
说说你的XXX项目吧
然后就开始长达80分钟的讨论,讨论内容全都是和项目的整体设计有关,面试官提出要求,我画一下架构的设计,然后在再解释。
整整80分钟,首先问到了项目的架构设计,然后扩展,如果自己项目需要满足10W QPS的需求,架构如何设计?
老生常谈
项目里面高并发下如何实现请求的过滤以及消峰?
消息队列,缓存
集群环境下如何保证数据的一致性?
主从复制,同步
服务器集群以后如何做到数据的共享?
共享存储,或者服务注册中心zk
说一说一致性Hash吧?
一个2的32次方个点的环。
问我MySQL主从复制会不会?回答不会。
通过binlog完成主从复制,主库开一个线程打log到从库的relaylog上,从库根据这个log重写操作
那你自己设计一下MySQL的主从复制应该如何解决?画一下你的思路?
最后面试官告诉了我MySQL主从复制的原理。然后和他探讨了一下我对这个原理的疑惑。
当时是使用了Redis主从复制的思想来考虑的。
你这种解决办法是从结果来考虑,是不能从原因角度考虑?
说一下STL的Map?
我说我不会,然后讲了一下java的实现,画了一下数据结构图。
讲一下红黑树?
我说您直接看我博客吧,里面有对他的分析。
ali云用的linux什么版本?虚拟机的呢?
6.3和7.0;
说一下常用的shell命令?
看过那些书?
选择出最好的三本?
1 深入理解Javaweb技术内幕。
2 深入理解计算机系统
3 大型网站架构
学习过程?
为什么硕士不报计算机?
你项目里面的这些架构的设计是怎么学习的?
还有一些架构设计的问题忘了了。
最后和面试官聊了一下如何看待非科班转计算机?以及自己学习的是Java,和腾讯的需要不符合怎么办?以及面试结果
总共82分钟,非常感谢面试官对非科班的鼓励,以及对我的肯定,说实话能得到腾讯面试官的肯定更加让自己有信心了。本来想着就试一试,毕竟不是C 的,不管结果如何,起码面试官面了82分钟,就当做面了两轮吧。
作者:mactawish
链接:[https://www.nowcoder.com/discuss/77189?type=2&order=3&pos=52&page=1](https://www.nowcoder.com/discuss/77189?type=2&order=3&pos=52&page=1)
来源:牛客网
腾讯一面,后台开发技术面,已挂,把问题记下来。
面试官是一个二十多岁的男生,很和善,所以在面试的时候也没感觉到怎么紧张,然而他问的问题我都不会就很难受。
1\. 自我介绍,我就把做过的一些项目简单说了说。
2\. 进程,线程,协程的区别,磕磕绊绊,协程根本不知道是个啥
3\. 排序,问我哪些是稳定性排序,没答上来,让我手写快排,还好,写出来了。
4\. java里的sort方法,我说了collections的排序,得实现compare方法,巴拉巴拉说了一堆。
5\. linux服务器性能监测,这个我直接说不会了。
6\. 一次性哈希,我说没听说过,只知道哈希,面试官就让我说哈希是什么,我说了几句,说是建立映射关系存储数据,尽量保证哈希值不重复什么的,感觉没回答到点子上。
7\. 问我MySQL怎么进行数据存储,然后又问了一个实际例子:
假如有一亿QQ用户,每个用户都有500好友,每个人都可能玩很多腾讯出的游戏,问如何存储能使获取一个人的好友玩的游戏列表。
我想了半天,说不会,最后被提醒用kv存储,面试官让我回去看看bitmap,这一部分是印象最深耗时最长的部分。
8\. 面试官问我还有什么问题想问的,我就问了问该怎么准备面试,面试官就说了一大堆,要学好基础啊什么的(其实想想基础部分答的确实很烂),对于实践项目没提什么建议,主要还是基础。
自我介绍的时候可能说项目多一点,然后面试官就一直问我实践方向的事,然而我都回答的很烂,问基础部分还是回答很烂,感觉一直get不到面试官的点,面试过程中他有多次重复一些话,应该就是因为我不理解他的意思吧。
晚上回到宿舍,打开手机一看,已挂,早就料到了,所以也没觉得什么,不过还是有机会被别的部门捞出来,所以还是要努力去准备啊!
作者:不拿offer不睡觉
链接:[https://www.nowcoder.com/discuss/77226?type=2&order=3&pos=49&page=1](https://www.nowcoder.com/discuss/77226?type=2&order=3&pos=49&page=1)
来源:牛客网
本人大三一名渣渣本科生,除了有一次阿里的电话面试之外,这是第一次正式的面试。
因为准备得不是很充分,所以抱着去学习一下的心态去面试的。
给我面试的考官还是挺和善的,所以尽管第一次正式面试,也没有太紧张。
1、首先简单的自我介绍
2、接下来项目扯了很多时间。先简单介绍项目,然后项目中负责哪些方面、项目用了什么技术,项目中遇见的最难的问题、自己做出最大的贡献是什么、项目的特色
其实这是我第一个项目,所以很简单,没想到能被问这么久,其实很多地方都答的很模糊。
3、然后问我为什么不用C++开发(估计面试官是搞C++开发的)。然后我说老师建议我们初学者用eclipse开发,所以就用JAVA了。
4、接着问了一下JAVA和C++的区别。简单说了一下区别,然后我说C++挺久没用了,现在用JAVA比较多,所以他没问我C++了,但是后面也没我JAVA的问题,估计面试官不是JAVA方向。
c跟底层更接近
5、Linux知道吗?答:简单的了解过。哦,那直接没问Linux了。。。没问了。。。了
6、TCP的可靠传输原理,流水线传输、拥塞控制
流水线传输,效率比较高
7、MTO(还是MOT,记不太清了)对传输的影响。我根本不知道那是什么,这道题就跳过了
MTU限制最大帧长度,所以当ip数据报超过MTU时,ip数据报必须分片,tcp则会自己进行数据长度安排
8、线程和进程
9、进程之间的通信
10、进程内存地址的分配
分配虚拟内存地址
11、你还有什么想问的
我进程和线程方面确实没什么准备,没想到连续问到了这方面的几个问题。
应该是前面回答得不好,所以后面的也没问数据结构和算法方面的东西了。也没手撕代码,第一次面试就结束了,整个过程30几分钟,自我感觉凉凉,答的确实很差。
面试官还是挺和善的,所以整过过程我还是很轻松的。
准备实习面试的时间还是太短了,准备再好好学习一段时间,去迎接下一次面试。
作者:少年已去
链接:[https://www.nowcoder.com/discuss/74814?type=2&order=3&pos=314&page=1](https://www.nowcoder.com/discuss/74814?type=2&order=3&pos=314&page=1)
来源:牛客网
发个面经,攒攒人品
一面 一面问的都比较基础,
Java的四个特性,jvm内存空间,进程与线程区别,hashmap底层,
快排,索引等等
二面 1.c++stl库
2.c++的vector和map和java的区别等等c++相关
3.加密算法
4.innodb和MyISAM
5.数据库MD5加密方法的具体实现
6.三级范式
7.索引
8.数据库CAP
9.进程的结构
10.进程的调度
11.进程通信方式
12.手画TCP三次握手四次挥
13.http协议
13.手写快排
14.堆排
16.二叉树,字典树,红黑树的自旋
17.并发,自己做业务选怎样的进程控制方式
18.socket
19.xms调优
20.哈希算法 总结: 腾讯主要是c++的,java招的很少,所以二面会问你好多c++相关的,根本不会,二面面试官也问了如果过了,能不能转c++,总之凉凉,但是面腾讯收获还是挺大的,面试官会给你一些很好的建议。
作者:ios开发
链接:[https://www.nowcoder.com/discuss/73823?type=2&order=3&pos=445&page=3](https://www.nowcoder.com/discuss/73823?type=2&order=3&pos=445&page=3)
来源:牛客网
岗位:linux后台研发
部门:社交网络事业群(sng)
时间:历时一个月
薪资:sp(已收到正式offer)
个人情况:主要做后台研发方向(c/c++/java)都用过,末流985计算机专业硕士,有过长达一年半的实习工作经历。计算机基础,算法,项目都还马马虎虎。之前秋招有运气好有拿到百度,滴滴(sp),京东(sp),美团,携程,搜狐(sp),好未来(ssp),便利峰(sp),一点资讯,小红书,虎牙(sp),乐信,华为,中兴等。。
一面:电话面,问了我目前的offer情况和找工作的理由,讲述一下zab协议过程,分布式锁原理,写失败会怎样?
zab分为选主,同步,以及多数派通过决议。
分布式锁使用文件节点实现,watcher通知,写失败就时失败
redis中自己使用的场景,为什么这样用?
惊群和雪崩效应说一下?redis源码看过没?
避免惊群要保证每次只通知到一个等待线程
它的性能瓶颈是什么?nginx惊群效应?
性能瓶颈是内存大小。
在说nginx前,先来看看什么是“惊群”?简单说来,多线程/多进程(linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群。可以想见,效率很低下,许多进程被内核重新调度唤醒,同时去响应这一个事件,当然只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠(也有其他选择)。这种性能浪费现象就是惊群。
惊群通常发生在server 上,当父进程绑定一个端口监听socket,然后fork出多个子进程,子进程们开始循环处理(比如accept)这个socket。每当用户发起一个TCP连接时,多个子进程同时被唤醒,然后其中一个子进程accept新连接成功,余者皆失败,重新休眠。
那么,我们不能只用一个进程去accept新连接么?然后通过消息队列等同步方式使其他子进程处理这些新建的连接,这样惊群不就避免了?没错,惊群是避免了,但是效率低下,因为这个进程只能用来accept连接。对多核机器来说,仅有一个进程去accept,这也是程序员在自己创造accept瓶颈。所以,我仍然坚持需要多进程处理accept事件。
其实,在linux2.6内核上,accept系统调用已经不存在惊群了(至少我在2.6.18内核版本上已经不存在)。大家可以写个简单的程序试下,在父进程中bind,listen,然后fork出子进程,所有的子进程都accept这个监听句柄。这样,当新连接过来时,大家会发现,仅有一个子进程返回新建的连接,其他子进程继续休眠在accept调用上,没有被唤醒。
但是很不幸,通常我们的程序没那么简单,不会愿意阻塞在accept调用上,我们还有许多其他网络读写事件要处理,linux下我们爱用epoll解决非阻塞socket。所以,即使accept调用没有惊群了,我们也还得处理惊群这事,因为epoll有这问题。上面说的测试程序,如果我们在子进程内不是阻塞调用accept,而是用epoll_wait,就会发现,新连接过来时,多个子进程都会在epoll_wait后被唤醒!
nginx就是这样,master进程监听端口号(例如80),所有的nginx worker进程开始用epoll_wait来处理新事件(linux下),如果不加任何保护,一个新连接来临时,会有多个worker进程在epoll_wait后被唤醒,然后发现自己accept失败。现在,我们可以看看nginx是怎么处理这个惊群问题了。
nginx的每个worker进程在函数ngx_process_events_and_timers中处理事件,(void) ngx_process_events(cycle, timer, flags);封装了不同的事件处理机制,在linux上默认就封装了epoll_wait调用。我们来看看ngx_process_events_and_timers为解决惊群做了什么:
1. void
2. ngx_process_events_and_timers(ngx_cycle_t *cycle)
3. {
4. 。。。 。。。
5. //ngx_use_accept_mutex表示是否需要通过对accept加锁来解决惊群问题。当nginx worker进程数>1时且配置文件中打开accept_mutex时,这个标志置为1
6. if (ngx_use_accept_mutex) {
7. //ngx_accept_disabled表示此时满负荷,没必要再处理新连接了,我们在nginx.conf曾经配置了每一个nginx worker进程能够处理的最大连接数,当达到最大数的7/8时,ngx_accept_disabled为正,说明本nginx worker进程非常繁忙,将不再去处理新连接,这也是个简单的负载均衡
8. if (ngx_accept_disabled > 0) {
9. ngx_accept_disabled--;
10.
11. } else {
12. //获得accept锁,多个worker仅有一个可以得到这把锁。获得锁不是阻塞过程,都是立刻返回,获取成功的话ngx_accept_mutex_held被置为1。拿到锁,意味着监听句柄被放到本进程的epoll中了,如果没有拿到锁,则监听句柄会被从epoll中取出。
13. if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
14. return;
15. }
16.
17. //拿到锁的话,置flag为NGX_POST_EVENTS,这意味着ngx_process_events函数中,任何事件都将延后处理,会把accept事件都放到ngx_posted_accept_events链表中,epollin|epollout事件都放到ngx_posted_events链表中
18. if (ngx_accept_mutex_held) {
19. flags |= NGX_POST_EVENTS;
20.
21. } else {
22. //拿不到锁,也就不会处理监听的句柄,这个timer实际是传给epoll_wait的超时时间,修改为最大ngx_accept_mutex_delay意味着epoll_wait更短的超时返回,以免新连接长时间没有得到处理
23. if (timer == NGX_TIMER_INFINITE
24. || timer > ngx_accept_mutex_delay)
25. {
26. timer = ngx_accept_mutex_delay;
27. }
28. }
29. }
30. }
31. 。。。 。。。
32. //linux下,调用ngx_epoll_process_events函数开始处理
33. (void) ngx_process_events(cycle, timer, flags);
34. 。。。 。。。
35. //如果ngx_posted_accept_events链表有数据,就开始accept建立新连接
36. if (ngx_posted_accept_events) {
37. ngx_event_process_posted(cycle, &ngx_posted_accept_events);
38. }
39.
40. //释放锁后再处理下面的EPOLLIN EPOLLOUT请求
41. if (ngx_accept_mutex_held) {
42. ngx_shmtx_unlock(&ngx_accept_mutex);
43. }
44.
45. if (delta) {
46. ngx_event_expire_timers();
47. }
48.
49. ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
50. "posted events %p", ngx_posted_events);
51. //然后再处理正常的数据读写请求。因为这些请求耗时久,所以在ngx_process_events里NGX_POST_EVENTS标志将事件都放入ngx_posted_events链表中,延迟到锁释放了再处理。
52. if (ngx_posted_events) {
53. if (ngx_threaded) {
54. ngx_wakeup_worker_thread(cycle);
55.
56. } else {
57. ngx_event_process_posted(cycle, &ngx_posted_events);
58. }
59. }
60. }
从上面的注释可以看到,无论有多少个nginx worker进程,同一时刻只能有一个worker进程在自己的epoll中加入监听的句柄。这个处理accept的nginx worker进程置flag为NGX_POST_EVENTS,这样它在接下来的ngx_process_events函数(在linux中就是ngx_epoll_process_events函数)中不会立刻处理事件,延后,先处理完所有的accept事件后,释放锁,然后再处理正常的读写socket事件。我们来看下ngx_epoll_process_events是怎么做的:
1. static ngx_int_t
2. ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
3. {
4. 。。。 。。。
5. events = epoll_wait(ep, event_list, (int) nevents, timer);
6. 。。。 。。。
7. ngx_mutex_lock(ngx_posted_events_mutex);
8.
9. for (i = 0; i < events; i++) {
10. c = event_list[i].data.ptr;
11.
12. 。。。 。。。
13.
14. rev = c->read;
15.
16. if ((revents & EPOLLIN) && rev->active) {
17. 。。。 。。。
18. //有NGX_POST_EVENTS标志的话,就把accept事件放到ngx_posted_accept_events队列中,把正常的事件放到ngx_posted_events队列中延迟处理
19. if (flags & NGX_POST_EVENTS) {
20. queue = (ngx_event_t **) (rev->accept ?
21. &ngx_posted_accept_events : &ngx_posted_events);
22.
23. ngx_locked_post_event(rev, queue);
24.
25. } else {
26. rev->handler(rev);
27. }
28. }
29.
30. wev = c->write;
31.
32. if ((revents & EPOLLOUT) && wev->active) {
33. 。。。 。。。
34. //同理,有NGX_POST_EVENTS标志的话,写事件延迟处理,放到ngx_posted_events队列中
35. if (flags & NGX_POST_EVENTS) {
36. ngx_locked_post_event(wev, &ngx_posted_events);
37.
38. } else {
39. wev->handler(wev);
40. }
41. }
42. }
43.
44. ngx_mutex_unlock(ngx_posted_events_mutex);
45.
46. return NGX_OK;
47. }
看看ngx_use_accept_mutex在何种情况下会被打开:
1. if (ccf->master && ccf->worker_processes > 1 && ecf->accept_mutex) {
2. ngx_use_accept_mutex = 1;
3. ngx_accept_mutex_held = 0;
4. ngx_accept_mutex_delay = ecf->accept_mutex_delay;
5.
6. } else {
7. ngx_use_accept_mutex = 0;
8. }
当nginx worker数量大于1时,也就是多个进程可能accept同一个监听的句柄,这时如果配置文件中accept_mutex开关打开了,就将ngx_use_accept_mutex置为1。
再看看有些负载均衡作用的ngx_accept_disabled是怎么维护的,在ngx_event_accept函数中:
1. ngx_accept_disabled = ngx_cycle->connection_n / 8
2. - ngx_cycle->free_connection_n;
表明,当已使用的连接数占到在nginx.conf里配置的worker_connections总数的7/8以上时,ngx_accept_disabled为正,这时本worker将ngx_accept_disabled减1,而且本次不再处理新连接。
最后,我们看下ngx_trylock_accept_mutex函数是怎么玩的:
1. ngx_int_t
2. ngx_trylock_accept_mutex(ngx_cycle_t *cycle)
3. {
4. //ngx_shmtx_trylock是非阻塞取锁的,返回1表示成功,0表示没取到锁
5. if (ngx_shmtx_trylock(&ngx_accept_mutex)) {
6.
7. //ngx_enable_accept_events会把监听的句柄都塞入到本worker进程的epoll中
8. if (ngx_enable_accept_events(cycle) == NGX_ERROR) {
9. ngx_shmtx_unlock(&ngx_accept_mutex);
10. return NGX_ERROR;
11. }
12. //ngx_accept_mutex_held置为1,表示拿到锁了,返回
13. ngx_accept_events = 0;
14. ngx_accept_mutex_held = 1;
15.
16. return NGX_OK;
17. }
18.
19. //处理没有拿到锁的逻辑,ngx_disable_accept_events会把监听句柄从epoll中取出
20. if (ngx_accept_mutex_held) {
21. if (ngx_disable_accept_events(cycle) == NGX_ERROR) {
22. return NGX_ERROR;
23. }
24.
25. ngx_accept_mutex_held = 0;
26. }
27.
28. return NGX_OK;
29. }
OK,关于锁的细节是如何实现的,这篇限于篇幅就不说了,下篇帖子再来讲。现在大家清楚nginx是怎么处理惊群了吧?简单了说,就是同一时刻只允许一个nginx worker在自己的epoll中处理监听句柄。它的负载均衡也很简单,当达到最大connection的7/8时,本worker不会去试图拿accept锁,也不会去处理新连接,这样其他nginx worker进程就更有机会去处理监听句柄,建立新连接了。而且,由于timeout的设定,使得没有拿到锁的worker进程,去拿锁的频繁更高。
消息中间件开源了解过没?
kafka,rabbitmq
(这个没深入问我,说了熟悉kafka,amq),说说tcp如何保证消息有序吧。接着大概问了我平时怎么学习的,爱看什么博客之类,面试就过了!
连续发送连续确认,根据序号来保证有序
时间:25分钟左右。
二面:电话面(一个星期左右)自我介绍,说说你会什么语言?
问了一点c语言方面知识,然后又问了一点java语言集合类的知识,你比较熟悉虚拟机是吧,jvm运行机制?
jvm怎么进行类型安全检查?
中间还问了一个jvm编译方面问题?
编译成字节码,依据规则表明作用,按照此规则进行解析,验证,加载等
没回答出来,设计模式了解哪些?
说说动态代理模式和静态代理模式区别,动态代理底层实现原理?
动态代理动态生成字节码和创建实例,是运行时创建的,静态代理则是编译时就确定了的,需要更多代码
反射了解吗?作用说一下?
依赖倒置
文件描述符作用?
负责文件的标识,包括网络流,文件流,设备io流,都可以通过文件描述来表示
进程间通信方式?
linux系统怎么查看网络连接?
netstat
都有哪些状态?你刚才说的状态怎么发生的?
tcp为什么要进行四次挥手?。。。。。。。
接下来两个算法题吧第一个,
1.A.....Z所有字母组合方式,不允许有重复的,用最优的方法实现!(说了位运算的方法)。
位运算判断2的26次方种情况
2.写一个方法输入一个整数,输出这个整数里面最大的质数,再次强调了方法最优!
质数标记法,标记处所有非质数,然后找出最大质数
找出N以内的质数
const int N=100000; vector<int> prime;//保存N以内的所有质数 bool notprime[N];//标志是否为质数 notprime[1]=true;//1不是质数 for(int i=2;i*i<=N;i++) { if(!notprime[i])//如果i是质数 { for(int j=i*i;j<=N;j+=i)//范围以内的i*u不是质数,其中u=i,i+1,i+2,...;u从i开始记录,因为小于i的哪些之前已经记录过了 { notprime[j]=true; } } } for(int l=2;l<=N;l++)//保存所有质数 { if(!notprime[l]) { t.push_back(l); } }
最后,后续会有人联系你!
感受:后来这位二面面试官成了我的老大,面试过程还是很愉快的!
三面:现场面
过了10天收到了邀约现场面的消息,周五到了深圳,周六上午正式开始面试的,当时陆陆续续有好几个认真比等,社招的,实习的,校招的都有,大概11点轮到了我,一进去面试官老师给我递了一张纸,写两个代码吧:
1.跳跃数组问题
dfs
2 广度优先遍历二叉树
队列
然后讨论了我做的项目,也介绍了他们自己正在做的业务。前面两个算法问题我都很快写出来了然后自己做的项目面试官也比较感兴趣,所以过程还是很愉快的,没什么大问题。’
四面:总监面
当天下午进行的总监面,一进去首先自我介绍,说说你最熟悉的项目,介绍下后台架构,你做的主要部分。(省略15分钟,全程我在说),你算法怎样?
二叉树后续遍历怎么实现?
用一个栈呢?
两个栈实现
然后问了一个算法问题,熟人问题,说一下你的思路?
你要怎么构造数据集?。。。你还有什么想问我的?
全程面试 30分钟左右的样子
五面:hr面
简单聊了一下学习,实习,爱好,女朋友之类的情况,接着问了目前拿到offer一些薪资情况,就要我回去等消息了!记得hr当时说我应该没问题。。
五面:面委会面
回来找内推人问了情况,显示是报批中,然后老大也说我这边也基本通过了,等offer就好了,然后接下来的两个星期本人就一心沉迷论文不能自拔。。结果就最近收到了要加面通知,面委会很快就打来电话了
自我介绍下!你做的项目中最拿手的架构介绍下?服务器用的什么?
我在网络上点击一个链接说一下全过程,到tomcat后,tomcat做了什么呢?
底层如何处理整个请求的?详细说一下?就这个问题我讲解了很久,面试官根据我的回答也问了很多其他知识点,线程池,nio,socket,servlet等。。
http常见状态吗300 302 301 304?
重定向
http缓存说一下?
tacerroute原理?l
icmp
inux系统熟悉吗?
怎么查看占用某个端口的进程?
netstat -anp
怎么查看网络连接?
cpu100如何定位?
us解释一下?
什么时候是不正常?
closed-waited timewait状态是什么时候出现的?
数据库存储引擎了解吗?
说一下innodb和myaisam区别?
底层索引怎么实现的?
然后问了一个黑名单功能算法实现。
面试时间:大概16分钟左右。问的比较广,不是很深入,当时基本都回答出来了,面试官对我的评价还是很不错的。让我直接等hr电话。
然后前天下午收到了录用电话和邮件,沟通了薪水,最终也是给到了sp。
整个面试过程经历了将近一个月左右。非常感谢牛客这个平台,校招过程中通过这个平台认识了很多朋友,也通过内推拿到了很多面试机会,收获了很多大公司的offer,衷心祝越牛客越办越好,也祝19届的学弟学妹们能找一个好的工作。好好加油,机会总是留给有准备的人!!
ps qq/微信 1581320438(欢迎叨扰)