在学长的公司做面试官的问题
我返校后就去了学长的公司,在学习期间也帮忙招一些有经验有能力的软件开发人员。我主要负责后端的面试,期间参与制定了面试的标准,出了一些公司面试问题。我们面试的人有一两年工作经验的,有实习生,还有一些刚才培训机构培训完的,也许有些人会奇怪 “怎么还面试从培训机构出来的?“,因为公司小且地理又处在三线城市,资源和吸引力不能和一线大厂比。
我们的面试流程简单,主要有以下内容:
制定的标准
定的面试评级:
- A:优秀
- B:良好
- C:一般
- D:较差
- E:差
对于 D、E 我们是不考虑的,没有二面的机会
面试要了解到的几点:
- 能不能快速上手开发?(基础扎实,学习能力)
- 能愉快合作吗?(理解能力,沟通表达能力)
进行面试
面试问题要在有限的时间内尽可能全面考察面试人员,我们的面试问题主要涉及计算机基础、语言、框架、数据库、项目开发等。
下面是面试问题,排版不太美观,这些都是我们脑海中零碎的知识,我们认为比较重要。
一、计算机基础
1. 进程如何通信(共享数据);线程的状态;死锁;
2. 操作系统IO:select、poll、epoll,零拷贝技术:mmap,sendfile
3. HTTP协议,版本的区别,状态码,Header
4. TCP 三次握手四次挥手;TCP UDP区别;
二、语言基础和框架
1. Java数据类型,数据范围,类权限修饰关键字,说下你对泛型的了解
2. 集合框架: ArrayList与Linked区别;HashMap;并发集合类;
3. 多线程:创建线程的方式?线程的状态?ThreadLocal 原理?
synchronized使用方式?线程池参数的作用
4. Spring: IOC & AOP;Bean的初始化;
常见的ApplicationContext实现,它们的区别;
依赖注入时发送循环依赖怎么解决?
5. SpringBoot:自动装配原理 / 让你封装一个SpringBoot Starter你怎么做?
pom <scope>的属性; <packing> 的属性
6. 数据库: MySQL,Inner join和 right join、left join 的区别
常见的索引区别,事务ACID ;
Redis, 应用场景,常用数据类型,底层数据结构,持久化
7. 消息队列应用场景,经典问题如何解决(消息丢失、消息无序、消息积压)
8. Linux:会shell脚本吗?说几个你认为出彩的命令以及他们的使用方法
在Linux 安装过JDK吗?怎么配置程序开机自动启动?如何创建定时任务?
如何调整时区和设置自动校准时间?硬链接与符号链接的区别?
SSH登录出现问题怎么排查?
如何修改yum源?怎么查询内存/磁盘使用情况?
怎么查看线程负载?怎么查看程序端口号?
9. 设计模式:线程安全的单例怎么实现?DCL单例,懒汉单例,静态内部类单例
三、项目问题
1. 让你实现一个“日志搜集“模块,你怎么实现?全局捕获异常怎么做?
2. 说下常见的权限模型?ACL、RBAC
不使用Spring Security让你设计一个权限拦截功能你怎么做?
(HTTP Header + Servlet Filter + 注解)
3. 项目如何做技术选型?最终选择的技术并非你掌握的技术你怎么学习?
4. 最近读过什么技术书籍?
协作方式
面试过程中考官使用在线文档进行协作,主要记录面试者的信息和面试评价,一般有面试时间、面试官、面试人员、面试评价、面试评级等信息。
面试流程,我是作为一面的面试官,我面完后觉得符合要求的,会在在线文档进行记录并推给二面的面试官(进入二面),二面没有问题后进入最后的谈论薪酬环节。
谈谈我的感受
我参与面试时间大约为三周,面试了十个人左右,对于我这个第一次做面试官的人来说,能够从另一个视角审视面试,感受有很多,也很深刻。
面试吧,不仅仅是考察知识,从面试官的角度来说,衣着形象、谈吐、表达能力也会看重;对于面试人员来说,基础知识的理解运用单靠看面经是不够的,不理解就说不到点上,难以顺畅应答;回答面试问题过程中,回答到点上比回答的多重要。
EOF