快手 二面 项目分析
1.简单说了一下我的前后端项目。
答:微信小程序,发帖、查课表、查成绩、下载试卷PDF。
2.说说全文索引,测试过用like做模糊查询在某个数据量下的效率吗?
答:我说测试过100w数据量下,查询一条数据要二三十秒,面试官觉得不应该会这么久。
3.面试官建议学学es解决模糊查询问题。
4.JWT技术,token放在哪?token放在浏览器的哪个位置?
5.解释session和cookie?
6.有了session,为什么还要cookie?面试官建议我看看“session也是靠cookie建立起来的”。
7.JWT中,下一次携带token访问server时,server如何确定client的身份?我是将个人不重要的身份信息以明文的方式放在token中,顺带解释了token的三部分组成。
8.假定jwt token不能设定过期时间,我该怎么设计token的过期时间?
答:token存redis中,并设置失效时间。
9.redis所有类型都可以设置失效时间吗?redis的string在哪些场景下用过?
答:我只用string当过缓存。。
10.springboot解决了什么问题?
答:解决了麻烦的配置。
11.springboot具体解决了哪些麻烦的配置?举个例子。
答:pom.xml中引入MySQL依赖,springboot就能帮我注入操作MySQL的bean,使用的时候注入bean就行(感觉回答的不太对,从现在开始头都麻了。。)
12.面试官质疑,只需要引入MySQL依赖就能配置好吗?
答:还需要在application.properties中配置MySQL一些参数。
13.spring boot还帮我做了啥?为什么AOP可以不侵入代码?JDK动态代理了解吗?
14.springboot还帮我做了什么?你觉得ioc是如何管理bean对象的?(麻中麻)
答:IOC管理bean对象。控制反转,默认单例(感觉已经答偏了)
15.你如何设计一个ioc管理bean对象?
答:工厂模式。
16.mybatis是怎样的框架?面试官感觉我说的和hibernate比较像(可是我根本没用过hibernate。。)
17.你觉得mybatis如何实现将数据库中的对象映射成Java的对象?用过JDBC吗?
18.mybatis传参,#传参可以防止sql注入,了解什么是sql注入吗?如何规避sql注入?
答:where 1 = 1。别的瞎说了一通。。
19.场景题:查自己的信息,select * from table where username=me,如果别人传入参数 where username=me or 1=1该怎么办?(其实还是如何防sql注入)
20.nginx为什么可以实现负载均衡?有哪些负载均衡策略?
21.算法题:打印目录树(10分钟手撕了,不过用的是C++而不是Java)
输入:
a/b/c/d
a/e/f
a/g
输出:
-a
--b
---c
----d
--e
---f
--g