北京泛微二面-Java开发。以下内容为面试复盘,面试官问题无改动,回答已进行修正。
自我介绍
我是XXXX,来自XXX…
面试官提问:
1.像这些比赛的话,你是自己参加还是社团的人一起参加?
答:大多数是3个人一个队伍,基本都是我带头做项目打比赛,也有一些算法比赛是直接参加。和社团人一起参加一般是作品开发赛。
2.讲一下哪个项目影响最深?
答:目前的毕设项目,是一个综合教育平台,前端用了Uniapp,后端SpringCloud,数据库用了MySQL,MongoDB,数据库缓存用到了Redis。项目的主要功能是积分答题,以及排名等我此外的话还开发一些学习的小功能,比如互译,拍照搜题,课程表…这些是调用了一些api,还有比如我写了个爬虫,定时来更新我项目里的教育日报等等
3.数据库用过哪些?
答:数据库的话,像MySQL,sqlite,MongoDB什么的都用过。
4.MySQL的外联接和内联接?
内连接
- 内连接返回两个表之间满足连接条件的行。只有当两个表中的连接列具有相同的值时,才会返回结果。
外连接
- 外连接返回两个表之间满足连接条件的行,同时还包括未匹配的行。
外连接分为左外连接、右外连接和全外连接。
左外链接:
左外连接使用LEFT OUTER JOIN表示,简写成LEFT JOIN;左外连接返回左表中所有的数据行;对于右表,如果没有匹配的值,返回空值。
右外连接:
右外连接使用RIGHT OUTER JOIN表示,简写成RIGHT JOIN;右外连接返回右表中所有的数据行;对于左表,如果没有匹配的值,返回空值。
全外链接:
全外连接使用FULL OUTER JOIN表示,简写成FULL JOIN。全外连接等效于左外连接加上右外连接。
5.MySQL你开发时候用到过什么锁吗?
答:在进行数据库备份的使用有过全局锁,全局锁就是把整个表锁死,只能读,其他的修改操作只会阻塞。全局锁下面还有专门锁表的表锁。表锁是控制并发事务之间对表的访问。
6.mybatis的分页用的是什么?
实现分页查询可以使用两种方式:使用数据库语句(LIMIT)或使用插件(PageHelper )
需要关注两个参数:当前页码和每个分页的大小
7.get和post的区别
1.get请求长度有上限(url长度有上限),post没有上限。
取决于游览器对于url长度的限定。
2.get没有post安全(网上)
从安全角度来看几乎相当,get是把请求参数放到url里,post是放到body中。如果有密码信息,直观上会显得不安全,但是query和body的参数都是明文,http本身是不安全的,请求在任意一个节点被劫持内容都是透明的。
我个人认为get和post只是请求方式不同,并不能对安全起到任何作用。
安全处理:双端加密 (https)
8. 说说怎么处理hash 冲突?
答:处理hash 冲突有几个方法:
拉链法:每个哈希表节点都有⼀个next指针,多个哈希表节点可以⽤next指针构成⼀个单向链表,被分配到同⼀个索引上的多个节点可以
⽤这个单向链表进⾏存储.
开放定址法:⼀旦发⽣了冲突,就去寻找下⼀个空的散列地址,只要散列表⾜够⼤,空的散列地址总能找到,并将记录存⼊
再哈希:⼜叫双哈希法,有多个不同的Hash函数.当发⽣冲突时,使⽤第⼆个,第三个….等哈希函数计算地址,直到⽆冲突
9.深拷贝和浅拷贝的区别是什么**?**
- 浅拷贝只复制对象的引用,而不复制引用指向的内容,因此多个对象共享相同的引用,修改一个对象会影响其他对象。
- 深拷贝复制对象及其引用指向的内容,每个对象都拥有各自独立的内存空间,修改一个对象不会影响其他对象。
- 浅拷贝适用于对不可变对象或可共享的对象进行复制,而深拷贝适用于需要独立拷贝的对象。
- 实现深拷贝的方法有多种,例如通过实现Cloneable接口并重写clone()方法,使用序列化和反序列化,或者手动递归复制对象及其引用指向的内容。
10.try catch finally,try⾥有return,finally还执⾏么?
无论如何,finally块中的代码总是会在try块结束后执行,除非发生了异常导致程序中断或虚拟机退出。finally块通常用于进行资源的清理和释放,以确保资源的正确关闭,例如关闭文件、释放数据库连接等。