腾讯 腾讯视频 客户端 4.27
1、自我介绍
2、第一个项目的设计初衷(为什么做这个项目,解决什么问题)
3、项目的数据库设计需要什么表?某个表的有什么字段?为什么不把主表和关系表合并?(这里没想打项目会问这么多....数据库设计的思路有点模糊,完蛋)
数据库的用户表中密码会在存入数据库前进行什么操作?(答的是在后端进行加密后才存入数据库)
后端怎么对密码进行加密?用的是什么方法?(前端传输密码过来,然后后端进行加密。MD5)
有了解过MD5加密的其他方法或者操作吗?(没有。我心里在想是不是什么加盐之类的,没了解过也不敢说,卑微)
刚才说前端是直接传输密码给后端?(用的http,所以也是明文传输过来)
那为何不在前端进行加密呢?(想过这个,但不是很懂。。个人理解可能应该是前端接收用户输入的密码时先进行第一轮加密,然后再将密文通过https传输给后端,后端直接存入数据库或者再次加密)
所以系统在登录的时候也是传输明文?(enenen....至今也不知道项目中https要怎么搞,只会传输明问到后台加密后与数据库中的加密密码进行比对然后确认是否可登录。 求大佬解答)
5、第二个项目主要是做什么的?(一个识别开关投退状态的app,其实参与的不多,只是后端里的一点接口测试与功能完善)
6、看你上面这个项目是用安卓做的前端,那你了解前端和后端之间是怎么交互的吗?(前端发起http请求给后台然后进行交互,安卓可能用的是第三方组件okHttp或Retrofit进行交互)
7、你在这个后端里负责的是什么部分?看你简历上说某接口的测试与实现,是什么接口?(就是一个excel表格的导入导出功能。。尴尬,我太菜了)
8、说说jvm内存结构吧?(简历上给自己挖坑了,虚拟机栈嘴瓢说成虚拟机方法栈。这部分分成了线程私有和线程共享去讲,不过运行时常量池和元空间这部分有点混了,这就补补血去)
9、说说GC会回收哪些垃圾?(感觉又给自己挖坑了)
10、谈谈引用计数和可达性分析的优点和缺点?(引用计数缺点是会发生相互引用导致的死循环而无法回收,优点不知道。。可达性分析优缺点是啥,不知道。。卒)
11、Java中引用计数和可达性分析的应用有什么?(引用计数记得已经废弃了啊。。可达性分析的应用答了用在了某些垃圾回收器上)
12、可以作为GC Root的有哪些?(只记得了静态变量和老年代对象,忘了常量是否也是)
13、GC Root存在刚才上面说的jvm内存结构的哪里?(方法区、堆、运行时常量池,有点模糊)
14、new HashMap()之后是分配在jvm内存结构哪里?(堆)
15、HashMap线程安全吗?为什么线程不安全?(不安全。jdk1.7采用头插***出现链表死循环、数据覆盖;jdk1.8采用尾插法后解决了链表死循环,但还是在多线程环境下有可能出现数据覆盖。还扯了下共享的数据变量没有加上可见性的限制,给自己挖坑了)
16、HashMap底层是怎么实现的?( jdk1.8 数组+链表+红黑树,还大概讲了为啥会加上红黑树)
17、那为什么Hashtable就是线程安全的?(每个方法都加了synchronized,使用每个方法都会进行加锁)
18、那为什么synchronized就能保证线程安全?(对象都有个对象锁,synchronized让每个线程拿到这个对象的时候都要先取到这个对象锁,然后再对数据或者对象的内容进行操作)
19、提到了volatile,那volatile是怎么保证变量每次读到的是最新的状态?volatile的原理是什么?(不懂,只会说让线程每次取这个volatile修饰的变量前都去主存里面拿到最新的变量的状态)
20、这里的主存又是哪里的内容?(Java内存模型,每个线程都有自己的工作内存,每次读取变量都要先从主存中读取到线程的工作内存中,然后对变量操作完后再刷新到主存)
算法题1:排序后的int数组,采用绝对值的比较方式进行重新排序
反问:
算法题1有什么其他复杂度更低的做法吗?
这是遇到的第二个很温柔很礼貌很客气的面试官,好感,最后还给了很多反问的机会。感恩
#腾讯##实习##面经##Android#