绿盟研发岗一二三面 已OC
绿盟科技
一面
2021年8月19日 10:00-10:42 HR电话提前约了面试时间,通过邮箱发了腾讯会议ID,面试官很准时,而且是个姐姐 哈哈哈
-
自我介绍+项目,这里讲了很久,讲了自己在每个项目的角色和任务分工,提到了数据库设计
-
就讲了下自己在开发中遇到的数据库设计,以及自己开发中遇到数据库设计遇到的坑
-
SQL优化,面试必问—>查询字段,数据库设计,走索引,索引失效,创建索引,单表数据过大要分表
-
绿盟主要业务?卧槽,这个真不知道,海投的,后面查了下是和阿里云,奇安信,深信服并列的网络安全公司
-
都是SpringBoot项目对吧,如何考虑一个SpringBoot项目的安全?(绿盟就是国内数一数二的做安全的企业),我就说了下平时注意的:
-
server.port 不用常用端口
-
数据库角色,不直接使用root
-
密码,用网站随机生成
-
token+拦截器
-
统一异常返回
-
假如有富文本编辑器输入,要转义,防止XSS
-
-
SpringBoot如何解决跨域?平时开发常常用,讲了下跨域就是对源地址和端口的限定,一般解决方案是在Controller的接口那加上@CorssOrigin(自己试过,没成功),自己一直是写的WebCorsConfig,配置全局跨域请求,就是设置源地址,请求头和方法的配置
-
那说说CSRF吧 ?解决方案? 跨站请求伪造
-
Mybatis分页插件用过吗?底层实现看过没? PageHelper嘛,用过,不过没看过底层,不过知道Mysql如何分页:
-
select * from table limit pageSize offset PageNo
-
表的数据过多,借助id分页,select * from table where id > pageNo * pageSize limit pageSize
PageHelper底层应该也是这样的
-
-
存储过程是什么?我说了下,这个东西说实话应该是不会用了吧,所以复习的时候都没看,但自己写过存储过程,还是知道一点,下面详细解释下:
一组为了完成特定功能的SOL语句集,存储在数据库中,经过一次编译后不需要再次编译。用户通过指定存储过程的名字并给出参数来执行它。存储过程是数据库中的对象。
可以通过一个命令对象来调用存储过程;也可以供外部调用,比如java程序。
其优点是:经过预编译,执行效率高;代码直接存在数据库,通过存储过程名调用,减少网络通信;安全性高,执行存储过程需要有一定权限的用户;可重复使用,减少开发人员工作量。
其缺点是移植性差。
存储过程中的优化思路有:
-
尽量利用sql语句替代小循环
-
中间结果存放于临时表,加索引
-
少使用游标
-
事务越短越好,事务过长或隔离级别过高会造成并发操作阻塞。死锁,导致查询及慢、CPU占用率极低
-
使用trycatch处理错误异常
-
查询语句尽量不要放在循环内
-
-
Redis缓存雪崩?解决方案?
-
考虑转语言? 啥意思,面试官说看自愿,写了几年Java了,暂时不考虑转,但公司需要可以考虑
-
平时开发环境? 代码是windows下编写,假如只是自己的demo,那就只是idea运行了,假如要让大家访问那就部署服务器了。什么服务器?最开始没学Linux的时候是Windows服务器,但一段时间就很卡,后面自学了Linux就买了阿里云的服务器。说说Liunx常用命令?新建文件,文件负责等等,其实部署主要是Docker?Docker用到什么地步?会DockerFile吗? 这个还是没问题,之前实习就是DockerFile打包的。
-
现在需要把在一台服务器的应用镜像,运行在另一台服务器上,这么做?自己没试过,不过应该是把镜像下载下载下来,然后传到另外一台服务器上,docker load即可,感觉Docker还是需要多看看
-
讲讲自己运用专业知识解决的实际问题?讲了未开始的设置数据库连接编码UTF-8,然后再将最近抢红包的一个项目
反问
-
面试官是什么部门的,什么业务?
-
还是谈到转语言,说Java Python都有,其实想全栈,但这对校招生要求太高了,所以可以只管后台开发
-
要是转会给时间吗?那肯定,Java转Python的,面试官说没见过没转成功的,我就说了自己的毕业设计是基于深度学习的TF开发的推荐系统
-
然后面试官是后面会有二面,好好准备下,我说好,继续聊了会
-
一共几面?1-2轮技术面,一轮总监面
-
又聊了会,面试预定的是半小时,实际42分钟,面试体验非常好!
PageHelper原理
-
使用PageHelper.startPage()时在当前线程上下文中设置一个ThreadLocal变量
-
在 ThreadLocal中设置了分页参数,之后在查询执行的时候,获取当前线程中的分页参数
-
执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询,查询结束后在 finally 语句中清除ThreadLocal中的查询参数
PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。只要可以保证在PageHelper方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocal存储的对象。
二面
2021年8月23日 14:35-15:09 面试官迟到了几分钟,当时我有点急,因为预定就是半小时,然后奇安信15:00的笔试,哈哈,好在也就几分钟就来了,面试体验非常好!
-
自我介绍?包括学校,专业,主修课程,掌握的技能,每次都要强调下我们学校的电子商务是偏技术的
-
说说项目吧,都是学校的吗?没有实习吗?项目都是学校和同学打比赛写的,有实习,因为疫情管控和通勤时间太长了就辞了。挑一个说说项目中的难点,如何解决,当时的心情怎么样?这个就不说了,项目烂大街啊哈哈哈,但反映的是项目必须准备充分,有1-2个可以讲的,讲解你遇到的困难,怎么解决的,这个过程你去如何阐述,这其实不仅仅检查你的开发能力,还能考验语言表述能力。不然你说项目没啥,那就狂问基础,直到你趴下为止......
-
挖了很久项目,那我们现在来聊聊基础,讲讲jvm中新生代和老年代的转换吧
-
大对象直接到老年代
-
分配担保机制:当Eden区没有足够内存时,发起MinorGC,若此时存活对象无法存入Survivor区,这通过分配担保机制把新生代的对象提前转移到老年代去;
-
Survivor To被填满,将所有的对象转移到老年代
-
Survivor To中一半以上对象的年龄相等,直接转
-
Survivor To中对象年龄达到阈值(默认15)
-
-
讲讲Spring,SpringMVC,SpringBoot,SpringCloud的区别和联系
-
都是关系型数据库对吧,还有非关系型呢,那说说常用的关联查询?Mysql有内连接Inner Join,left Join,Right Join,没有全连接,Sql Server有全连接
-
网络怎么样?正打算说OSI七层协议,面试官说给个场景,说说浏览器请求一个搜狐的网站,到用户显示用到的协议吧。首先,域名,搜狐是HTTPS的,拿到域名就要进行域名和IP的转换,IP协议,用到了DNS协议,底层是UDP协议,然后是TCP协议的三次握手建立连接,请求后端,拿到数据,渲染页面
-
平时怎么学习提升自己的?千里培训—>看b站视频学习—>看博客和公众号(举了几个博主和美团技术团队的博客)—>看书,因为前面的都是别人嚼碎的东西,要想深入底层,只有看书,最近在看《深入理解JVM》,平时看书也会做读书笔记(电子档的),这个是方便后面查找知识点
反问:
-
进去真的要转语言吗?其实我知道答案,我只是想继续聊会,语言只是工具,有学习能力才是最重要的
-
请面试官评价下我今天的表现?记不太清他咋说了,反正没有直接说怎么怎么样
-
又聊了会,说等会人事会通知你后面的面试流程,今天就这样吧
VP面
2021年8月27日 16:35-17:04 太紧张了,一想到是VP就紧张的要是,看牛客上说VP气场十足!搞得中午都没睡着,下午进腾讯会议,发现是面试官挺年轻啊,应该是部门老大吧,很和蔼的!全程基本上是聊天,面试体验巨好
-
自我介绍+专业介绍+项目+比赛,期间也在问我一些东西
-
说一下你觉得最有成就感的事?就讲了下自己自学经历,里面学到什么,面试官就笑了
-
平时有关注什么技术论坛吗?美团技术团队,还有很多UP主,博主等等
-
为什么选择武汉?
反问
-
面试官您在选候选人的时候,看重什么? 一面二面三面不一样的,哈哈,记得最清楚的是一面就是看和简历匹配度,写了精通的话,那就不好意思了,那就要好好问问你,我当时也笑了,我说这是对技术的不尊重,他说没个10年这些精通的都是作死,笑死我了!
-
对我的评价怎么样?
然后聊了很久,面试官说,你有啥想聊的都可以跟我聊啊,哈哈哈,确实面试官技术人很好,技术广度很广的,反复强调数据结构和设计模式
-
于是我就说这个数据结构和算法我还好,设计模式,因为没怎么写企业的项目,积累很少,他说这个是时间换来的,你已经很不错了
-
公司培养体系?只能说非常完善!
-
薪资?不是BAT那种企业,公司是自研软件,然后卖钱,盈利模式不一样,但薪资是中上游
OC
HR给我打电话的时候,我还在深信服笔试,微信小程序把手机锁了,我猜想应该是绿盟的,还看了电话是武汉的,就接了,当时在自习室,我很小声,HR问我放不方便,我说等会吧,现在不方便,约定了半小时后她再打来。
后面聊了15分钟,就发offer了~