这一个面试流程,简简单单,但是却牵扯出来好多真实的问题,可能有一些就是我们在日常的工作中并没有特别注意的知识点,但是没想到在面试官这里还成为了一个重点的情况,或者通过一个刚跟简单的点延申引出了很多底层的知识点,不信,看一下吧,如果是你,你该怎么回答?
linux 使用情景
有没有用过linux,你能用它做什么?
Linux是一个长时间运行比较稳定的操作系统,一般把它。作为服务器。
Linux本身具有c的编译环境,我们的一些软件是没有(redis,Nginx)软件包的,需要在linux上编译得到软件包。
说一下linux常用命令
pwd:获取当前路径。
cd:切换目录/跳转目录。
su -u:切换到管理员。
ls,ll:列举目录。
文件操作命令:
tail:查看
rm -rf:删除文件。
vi:修改
mkdir:创建文件夹。
你是使用什么来连接远程服务器的?
需要依赖于linux服务器安装ssh服务端的,一般这个ssh服务端口为22。Putty,xshell,securtcrt。使用sftp客户端来来凝结sftp服务端,来上传,下载文件。Winscp,xftp,fz等。
你有没有做过一些关于数据库的优化?
定位慢查询优化方案:数据表设计时遵循范式,选择合适的存储引擎,选择合适的引擎,分表,分区,读写分离,缓存,语句优化
什么是jvm,jvm底层原理,调优
内存模型栈堆程序计数器方法区。,Jvm堆中jvm对象分配规则。
线上环境jvm排查实战与dump日志排查,Jvm自带visualvm
复制,标记整理,标记清除分代等回收算法,Gc中minor GC与full Gc差异。帅杰大概回答了这些,而且都是从底层来说的。这些由于篇幅太多,会在以后的文章中更新。
谈谈Nio的架构
Osi七层 :应用,表示,会话,传输,网络,数据链路,物理。
tcp:应用,传输,网络,链路。
Tcp/ip协议组:应用层:tftp,http,snmp,ftp,smtp,DNS,telnet。
传输层:tcp/udp
网络层:IP,ICMP,RIP,OSPF,BCP,IGMP
链路层:SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层:iso02110,IEEE802,IEE802.2
阻塞io /bio,非阻塞io/nio io多路复用/mio 信号驱动/driven
/io 异步io/aio。帅杰当时全部把这些说出来了,并且还给面试官画了各个的模型草图,从应用,内核,网卡层级讲了一下。
Tcc分布式事务
这里面试者画了他公司的架构图,
Try:预留业务资源/数据效验
Confirm:确认执行业务操作
Cancel:取消执行业务操作
基于netty实现的im聊天室
在BIO模型中,服务器通过ServerSocket来开启监听,每当有请求的时候开启一个线程来接受处理和维持状态。这种思想在低并发,小吞吐的应用还可以应付,一旦遇到大并发,大吞吐的请求,必然歇菜。线程和客户端保持着1:1的对应关系,维持着线程。维持那么的多的线程,JVM必然不堪重负,服务器必然崩溃,宕机。
而在非阻塞的Netty中,却可以应付自如。从容应对。Tomcat就是基于BIO的网络通信模式(Tomcat可以通过一定配置,改成非阻塞模式),而JBoss却是基于非阻塞的NIO实现。
NIO的网络通信模式很强劲,但是上手却一点都不容易。其中解决和牵扯到好多网络问题。如:网络延时,TCP的粘包/拆包,网络故障等一堆一堆的问题。而Netty呢,针对nio复杂的编程难题而进行一系列的封装实现,提供给广大开发者一套开源简单,方便使用的API类库,甚至青出于蓝而胜于蓝,甚至几乎完美的解决CPU突然飙升到100%的bug 。
由于时间有限,面试者还被问道了分库分表,源码解析,分布式数据库中间件sharding-sphere,底层索引原理及实现,并发编程,dubbo的spi机制的源码剖析,zk的分布式锁,红黑树的剖析,jdk底层的一些排序算法,怎么优雅的写代码等。
看到我们程序员要想拿高工资,技术这一块还是最关键的一块。我们在平时的工作学习中,要深入的去理解这些技术栈。而不是到了面试时间抱佛脚似的去背面试题。
而在学习和日常工作中,我个人比较喜欢总结,像什么linux命令啊,大数据组件安装啊甚至是jdk 的安装步骤,只要是接触到的相关技术,我就会进行相应的整理然后封存,天知道什么时候会有用呢?对吧(整理的比较乱,不要笑话啊)
就像上面说的,这样整理相当的乱套,所以呢?我还有一个习惯就是每个星期,我会进行一次大整理,整理成下面的样子,看着文件夹中分类的知识图谱越来越多,每一个知识点的内容越来越多,也是一种很不错的成绩感,这不,最近身边亲戚家的孩子,受我影响踏入计算机这一行的,找工作面试,我就把这些图给他们,让他们作为参考,效果还不错