叮~,你有一条新的面试邀请,请注意查收……
分享一些面试题
前言
最近已经好久没有分享内容了,一方面因为之前修了一段时间假,最近确实有点忙,整个11月有很多事需要处理,而且临近年底,项目上也会有比较多的对接事务,所以也没有心思写东西(主要还是最近有点懈怠,没有好好学习😂),另一方面因为之前的一些事,个人状态不是特别好,所以最近一直致力于调整个人状态,不过好的一点是,一切都在往越来越好的方向发展,而且美好的事情值得坚持,所以我又开始写东西了,不会再有例外了(再难也要笑着活下去,请叫我打不死的小志😂),好了,我们开始今天的内容。
面试总结
最近被邀请面试(确实没打算找工作,至少不是现在),想着没什么事就同意参加了,当然过程不是特别顺利,但是让我发现了一些自己的短板,也让自己能找到未来的学习方向。从面试的情况来看,你的硬实力主要体现在以下几个方面(当然也是被频繁问到的):
- 多线程:处理基础知识,会问及实际工作中多线程的应用情况。从我个人目前的工作情况来看,我确实没怎么用到。
- 集合:处理常用集合的实现原理和基础知识,会问你如何设计某些集合:比如让你设计一个既线程安全又高效的List
- JVM: 一般会问到内存模型、JDK的新特性
- 框架类:一般会问到引用场景或者让你实现某个需求
- 优化类:会问到你做过的优化工作(代码层面、sql)或者会说一个场景让你优化
- 开放类:会提一些具体的问题让你解决,比如:如何避免前台业务重复提交
面试过程中,还有一些算法编程机试题,主要考察你的代码能力和算法功底,作为非科班出身的我,这一块确实得恶补了,这里要想答得好,可以从以下几个方面入手:
- 养成良好得编程习惯,可以参考《阿里巴巴java规约手册》,命名、注释、测试用例一定要规范
- 平时要下功夫熟悉数据结构:栈、树(二叉树、红黑树)、队列等
- 掌握常见算法,如:排序、递归
- 熟悉集合,因为很多编程题都有性能要求,熟悉集合可以让你选择合适的容器
- 多练习,可以在牛客、leetcode等网站刷题
面试题分享
-
多线程的状态
(1) 新建(new Thread)
- 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
例如:Thread t1=new Thread();
(2)就绪(runnable)
- 线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();
(3)运行(running)
- 线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
(4)堵塞(blocked)
-
由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。
-
正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
-
正在等待:调用wait()方法。(调用motify()方法回到就绪状态)
-
被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)
(5)死亡(dead)
-
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。
-
自然终止:正常运行run()方法后终止
-
异常终止:调用stop()方法让一个线程终止运行
- 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
编程题分享
-
二叉树:输入二叉树任意节点,返回该节点对应的二叉树所有节点
-
输入一段如下字符串,包括数字、空格、四则运算符(+,-,*,/),计算其值,数值不合法,打印L:
1*3+9-8+23*35+44/2
所有输入参数均合法(隐含条件:可能存在开始或结束为符号情况,可能全为符合,或全为数字,或全为空格,可能存在连续符号情况)
-
输入两行,第一行为数字个数,为正整数,第二行为空格分隔的整数,有负数情况,请打印反数(如-1和1)的个数。输入中不存在重复数字的情况
-
给定一个仅包含数字
2-9
的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
总结
今天鉴于篇幅就写这么多吧,后面会继续整理分享。当然,今天只是分享了一部分面试相关的内容,小伙伴们还是要努力呀,面试一方面是为了找工作,另外一方面就是看一下自己的身价,当然还能让你找到自己的短板,所以哪怕你不换工作,也建议你参加几场面试,只有经受社会的毒打,你才能成长呀😂!
最近,和同事聊天的时候,我们总是吐槽,新进的员工,能力没你强,工资比你高,关键是还得你带,你说气人不气人,感觉气人的话就好好努力呀,实力攒够了你也可以跳槽拿高薪,来个工资倒挂🤣