卓望面试复盘
技术面试
1. 自我介绍(省略)
2. 说说反射?
在虚拟机运行的过程中。对于每一个类,都可以知道它所有的方法和属性,对每一个对象,都可以获取它的属性并且调用它已有的方法。这种动态获取类和对象方法属性的功能就称为反射。
(补充)反射的优缺点:
优点:代码灵活
缺点:1. 因为需要解释。所以执行速度比直接执行要慢。
可以获取里面所有的方法和属性,所以会存在一定的安全问题。
3. 说说泛型?
泛型,本质化的意思是将类型参数化。就是将要使用的类型用一个参数进行替代。
泛型有三种用法,泛型化方法,泛型化接口,泛型化类。
泛型化方法:
在方法返回值之前加入 <泛型符号>,并在参数中用上泛型。举例如下
public static <E> void printArray(E[] array){ for(E element:array){ System.out.print(element+" "); } System.out.println(); }
泛型化类
在类名后面加 <泛型符号> 并在方法和属性中使用泛型。举例如下:
public class Animal<T>{ private T name; public Animal(T name){ this.name=name; } public T getName(){ return this.name; } }
泛型化接口
在接口中使用泛型,需要在接口名后加<泛型符号>,使用举例如下:
public interface jk<E>{ public E method(); }
泛型化接口进行继承时:(也可以只使用普通返回方法。)
public class myInterFace<E> implements jk<E>{ @Override public E method(){ return E; } }
4. 有10几个G的文件,里面全是字符,我该如何统计其中的字符数?
当时有点小蒙,不过还是回答了按行读取,因为百度搜不到标准答案。所以现在复盘还是按照自己的思路来了
1.因为文件大:涉及到读取内存的问题,一次性不能读取太多,最好是按行读取,防止内存爆栈。
2.统计的是字符,所以用数组也许并不适合作为统计工具,可以用HASHMAP进行统计,而如果里面只是英文字母的话,则可以考虑开一个0-51的数组,用来代表a-zA-Z相应的个数。
5. 如果我用的电脑是老式电脑,比如内存只有4G,我该如何优化加快统计效率?
这个问题我还是想了一会的,不过还是想到用多线程的方式进行统计,绕过统计算法的问题,从并行处理的角度加快速率。多个线程将文件分成几块,每一个线程统计自己分到的文件中的字符个数,最后进行一个汇总。
6. 线程之间是如何通信的?(有待研究)
一个属于听过但是没有仔细研究过的问题,只回答了使用静态变量。这样无论新建多少个对象都只会使用同一个静态变量,在更新之后马上就可以获得变化后的量。(但必须要给这个静态变量修改的方法加锁。)之前多线程统计数据的时候也只用过这种方法。
7. 线程安全和线程不安全是怎么区分的?
多个线程操作同一个数据时,如果数据结果出现和预期情况不符合的现象,就是线程不安全的。因为多个线程同时操作同一个数据容易产生数据覆盖的现象,容易丢失部分更新后的数据。这样的多线程操作就是不安全的。
8. 说说锁的原理?为什么加了锁之后就安全了呢?
加了锁之后,执行相应的代码块,或者操作相应的方法,或者对象,如果没有获得锁,就会被阻塞,一直到获得锁的线程执行完毕释放锁之后,才能获得锁进行相应的操作,这样的操作就是安全的。
9. LINUX安装MYSQL过程?
0.0我是真没想到会有这个问题,但还是凭着记忆答了一点。添加用户和用户组->解压包->修改包的权限->启动服务->登录数据库->修改密码->开始使用
10. LINUX如何查询CPU使用状况?
top命令
11. LINUX常见命令说几个?
ls查看当前文件夹,cd进入某个文件夹,rm删除,cat查看文件,vim编辑文件(真滴奇怪,自己一复盘随手说好几个,当时一问就答了个cat和vim还有管道。)
12. 说说LINUX里常见的文件夹?
当时答的时候就说了个bin和tmp.连home和root都忘了。看来是生疏了啊
bin:相关命令的目录
dev:用来管理磁盘
home:每一个用户都有一个home主目录
tmp:临时文件存放的目录
boot:启动Linux时使用的核心文件,包括连接文件以及镜像文件
etc:Linux下的相关配置文件
opt:这是给主机额外安装软件所摆放的目录。如安装Oracle数据库就可以放在该目录下,默认为空
root:系统管理员,超级权限者的用户主目录
usr:用户的很多应用程序和文件都放在这个目录下的local子目录中,类似与Windows下的program files目录;
原文链接:https://blog.csdn.net/qq_45309297/article/details/105805318
13. 你电脑上怎么安装MYSQL的?
用ZIP安装的,解压之后配置一个conf。然后用命令行启动服务,登录之后修改密码。
14. 项目如何分工?
一个前端,一个进行项目分工+前后端成品拼接。两个后端接口编写&数据库设计。
15. 项目使用的技术如何选定?
尽量选用前沿技术,SpringBoot+MybatisPlus
16. 负责项目的哪一块?
后端接口编写&数据库设计。
17. 怎么保证线程安全?
加锁。
18. MYSQL如何进行优化?
(博主目前的知识盲区)只回答了使用索引。面试官追问。
19. 那索引是如何优化查询速度的?(知识盲区)
MYSQL底层这一块并不是非常了解,但是回答了B+树,可以不用以遍历的形式进行查找。
20. 如何知道索引优化了查询速度?
EXPLAIN命令可以分析语句执行情况。(当时只回答了有一条命令可以查执行时间,没用之前半秒,用了之后零点几秒,也是对我自己醉了。)
21. 说说左连接和右连接?
left join和right join.左连接时将左边所有记录保留,右连接时将右边所有记录保留。inner join则是将左右都不为空的数据保留。
HR面(群面的形式)
在复盘之前,有必要讲讲HR面的体验。首先是HR真的很帅,妥妥精神小伙,说话也非常温和,当时我们5个人坐在外面等候面试的时候,他跑过来对我们说:“要是觉得渴了你们就自己接点水喝,不要客气,把这里当自己家里就行。”当时我们就挺融洽的,一下就消除了面试之前那种紧张的压力感,之后没过多久自然就开始进行面试。
然后大家按自愿的形式轮流介绍自己,没有那种暗流涌动的感觉,有的只是大家的互相分享。有轻松的,当然也少不了严肃的环节。但即便是严肃的时候,也能感觉到大家都在很踊跃的表达自己的想法,和其他人之前发表的观点进行融合,而不是对其他人的想法进行一个强烈的抨击。直到最后面试结束的时候,我们也没有一丝的不愉悦,6个人坐在一起互相讨论和交流想法,这本身就是一次难忘的经历,不管结果如何,过程都值得我们受用终身,从这一面我就开始觉得,这里很行。暂且不讨论说公司技术的问题,一家公司的工作氛围如果都是像这样积极融洽的,那么我愿意相信公司里的每一个人都可以过的很满足,哪怕最后没有达成自己的目标,也不会觉得遗憾。而是奋斗过,拼搏过,便也就不会后悔自己当初的选择。
- 来个自我介绍吧
- 有什么爱好?
- 情景题:假如晚上6点钟有一场歌唱会,要在这里举行,但在4点的时候,物业突然打来电话说租用这片场地需要多加2000元,否则将进行回收,而你此时又恰好联系不上学校负责人,你该如何处理这个问题?(HR:我出去3分钟,你们可以自由讨论,回来之后,你们有人想好了可以先来回答这个问题,这个问题没有对错,每个人发表你们自己的想法.)
- 还有什么要问的吗?