9.27号面试复盘
第一次视频面试。开始比较紧张。感觉面试官底底蕴很深,没有问java基础,集合,线程池等等,主要是挖的项目以及项目中用到的技术。很多没答上来但是也暴露了自己的一些不足,有所收获。
开场自我介绍
介绍了名字专业。简单说了说自己大学四年学了哪些技术,做了哪些项目。
开始有点紧张,事先练习了几次自我介绍,自我介绍时候一直在想下一句怎么说。自我介绍完了面试官说不用紧张,眼睛看向一处就好。
然后问我项目是怎么设计的。
先交流,出(需求)文档,再修改(需求)文档,最后根据文档设计数据库,先设计出一些实体,然后再联结实体间的关系等等。
(面试官问我上面的问题可能是想了解我项目用到了哪些技术,然后在针对性提问题,回答的不在点子上。)
那你说说你做了项目的哪些功能,聊到哪里我们就停下来问哪里。(大概是这个意思)
做了用户管理模块(简单说了说用户的操作),沙盘画面同步机制,以及预约咨询等等。
我看你用了websocket,为什么选这个技术。
前后端交互的数据量比较大,不适宜使用http。
说说http,socket与websocket的区别。
http是无状态的。websocket可以前端来发数据,也可以后端主动推送数据。socket开启后阻塞然后等待请求过来(开启一个线程处理),请求处理完了再(把响应结果)发回给客户端(想起来自己写的socket聊天室推出来的)。
说说全双工通信。(具体问题不记得了,全双工通信相关)
TCP是全双工通信,在开始发送数据前要进行三次握手,三次握手就是建立全双工通信的过程。(双方都知道了彼此的序列号)彼此之间可以互发数据。
websocket有什么标识。
这个的话没有注意过,项目中后端开启websocket只需要一个注解即可,然后补充几个事件驱动的函数,如实回答后面试官跳过了这个问题。
问了简历上项目的ack机制。
当时项目多端同步(沙盘摆放情况)时出现了问题,排查时候有些发出消息的消息没有收到(或者发出次序问题导致同步情况不一致),问了专业的人提出使用应用层ack机制去处理,确保消息的正确处理,然后修改代码成了每次发出消息后要等对方确认收到后才会丢掉这个消息,否则会尝试重发。
问了消息队列。
这个暂时没有学习。
开始说第二个项目。
部署,维护以及二次开发部分功能的SpringCloud Alibaba后端。(大致概况了一下)
问了Session共享的方式,Session共享能干嘛,以及用redis实现Session共享时候要怎么做。
Session共享的方式能想起来的有使用redis去实现,Session共享可以实现一个登录,比如A,B俩个网站都是同一个公司的,那么在A网站登录后(通过Session共享的方式)B网站也可以登录。redis实现Session共享的时候可以在redis里面放token。
说说token的结构。
第一时间以为问我是token的算法,怎么实现的加密,当时懵了,说不太清楚这个。
数据库幻读,不可重复读。
如实回答不太清楚了。(>-<)-(刚好都忘了,只想起来脏读)
问了我分布式事务是什么,怎么实现分布式事务。
举了个下订单扣库存生成订单的例子,彼此模块不在同一台机器上,没有分布式事务的时候其中一台出问题可能导致订单没有生成成功却白白扣了库存。这个时候如果有分布式事务就可以回滚。实现分布式事务是在每一步操作都保存一个数据库的快照,出了问题就根据快照回滚。
最后问了我个问题,怎么解决高并发应用,访问量非常大。(大概是这个意思)
1是访问来时先查询redis,redis没有查询到再访问数据库。
2是优化数据库的查询,频繁查询(不频繁修改)的字段加索引。
那么要是访问量太大了,要不要做个负载均衡啊。(大概是这个意思,原话不记得了,是往这个方向在引)
(纠结了一会使用nginx还是使用微服务)
可以把多份应用部署到不同的机器上面,然后注册一个服务,根据服务名去访问。(说了半天,大概是这么个意思)
最后反问环节。
问了是否会配发电脑。自己电脑是Linux如果没有电脑的话与其他人的工作环境会有冲突。
会在工位配台式电脑。



