查看原文
其他

疫情当下,帮公司远程技术电话面试java期望1万7千程序员

我是程序汪 我是程序汪 2021-09-08


面试视频版本在 B站,欢迎大家观看

B站就是下面账号

视频可能更有感觉哦

面试的答案在本文章

建议大家先看视频,然后看自己能否回答上

回答不上的回头看看本文章效果更好哦

面试的日子里有程序汪的面试视频和文章,面试不慌了(这广告打的)

这也算模拟面试吧,谢谢大家支持,




自我介绍


这是所有程序员面试的第一个问题

自我介绍

程序汪说下注意点吧

  1. 一定要把自己的优势说在前面,如学历高英语,就先把自己我是985XX高校 或 XX一本 英语8级,如果自己学历差就简单说大专 大学就行

  2. 项目啊,一定要重点介绍你做过哪些项目,面试官招人都是非常非常看重项目实战经验的,项目背后有什么技术

  3. 会找面试官感兴趣的话题聊,比如你面试的是类似美团这样的O2O互联网公司,你面试前肯定要做下功课,比较美团 是分布式微服务  数据库主要用mysql  中间件主要用MQ  缓存主要是redis  业务主要是移动端的 有高并发场景,这样功课你在美团的招聘信息里就能找到。找到面试企业核心技术栈面试的时候你就可以多聊这些和公司息息相关的技术。


总结 

  1. 优势放前面说

  2. 多说项目实战以及背后技术

  3. 找面试官感兴趣的技术话题




面试官:string类为什么是final类型


String是java程序员用的最频繁的核心类

建议大家把频繁使用的类多研究下


回答:String类为什么是final类型

  • 为了实现字符串池(只有当字符是不可变的,字符串池才有可能实现)

  • 为了线程安全(字符串自己便是线程安全的)

  • 为了实现String可以创建HashCode不可变性(Map的key一般String用的最多原因就是这个)

很多人只知道final修饰了就不能变了,不能继承了

然后就没然后了


String被final修饰:注意是安全性和效率

还有一点很多初学者没搞明白

final修饰的对象只是引用地址不可变,内容还是能变的


相关String面试

  1. String、stringBuffer

  2. String里的toString() equals 方法实现




面试官:HashMap的底层数据结构及原理

HashMap也是使用频率非常高的类,在面试中出现的概率也高

程序汪面试了很多人,发现大部分人对HashMap中的hashCode这个关键方法一无所知


这里简单总结下


  • 数组+链表+(1.8增加了 红黑树)

  • 搞懂hashCode作用

  • put和get的过程

  • hash冲突是什么


  1. 利用key的hashCode重新hash计算出当前对象的元素在数组中的下标

  2. put存时,如果出现hash值相同的key,此时有两种情况。

    a :如果key相同,则覆盖原始值;b:  如果key不同(hash冲突啦),则将当前的key-value放到链表中

  3. get获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。

  4. HashMap是如何解决hash冲突问题(数组+链表),核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。



相关HashMap面试题

18K程序员Java中的hashcode是干嘛的,居然不知道

Java 经典面试题:为什么 ConcurrentHashMap 的读操作不需要加锁?

为什么ConcurrentHashMap的读操作不需要加锁?




面试官:java内存泄露怎么定位


回复:jmap,jstack 的使用等等

这是考察平时排查问题工具使用情况,如果真不清楚也可以实话对面试官说

千万不要不懂装懂,一般面试官都很讨厌的




面试官:SpringMVC全流程描述


面试官:SpringMVC的UML时序图给我画下 程序员:我不会画


能把上面的流程图说清楚或当着面试官画出UML图

非常完美




面试官:线程中start和run方法区别



考察对线程的熟悉度

  1. 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码

    (可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法


  2. 这里方法run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止


start方法可启动多线程

run方法只是thread的一个普通方法调用,还是在主线程里执行,是不会开启多线程的



面试官:java里面的线程池原理



下面文章已经讲过线程池原理了,程序汪的建议大家把线程池的原理图和核心参数好好理解下


帮公司面试1万到1.5万薪资的Java程序员,来看看我问什么




面试官:数据库的悲观锁和乐观锁


这个程序汪面试问的也比较频繁,因为实际项目开发中用的真不少

这些锁都是保证数据一致性


面试官:什么是乐观锁请举例 程序员:瑟瑟发抖 不懂啊

面试官:mysql的悲观锁怎么防并发的 程序员:没考虑并发


还有一个分布式锁,互联网项目中会用

80% 人不知道的 Redis 分布式锁的正确实现方式(Java 版)



面试官:项目实际中应用过的设计模式介绍


程序汪介绍一个模式,其他还有很多比较简单的,

强烈建议大家把简单的设计模式一定要掌握几个

面试的时候也好不慌


Java的模板设计模式



面试官:高并发场景接口优化思路


这个问题其实比较泛

面试官一般问这样的问题注意想听下你的设计思路

高并发根据业务不一样处理都不一样复杂度也不一样

比如像12306那样超级复杂高并发


简单总结

  1. 添加负载均衡层,将请求均匀打到系统层。


  2. 系统层采用集群化部署多台机器,扛住初步的并发压力。


  3. 数据库分库分表 + 读写分离或微服务


  4. 缓存集群引入


  5. 数据库其实本身不是用来承载高并发请求的


  6. 比如说消息中间件技术,也就是MQ集群,是非常好的做写请求异步化处理,实现削峰填谷的效果。





面试官:Spring的事务管理



spring中的事务项目开发中非常重要,不管你是用的编程事务 还是注解事务

一定要基本了解下spring的事务


Spring为事务管理提供了一致的编程模板,在高层次建立了统一的事务抽象,像Spring DAO为不同的持久化类提供了模板类一样,Spring也提供了事务模板类TransactionTemplate(java的模板模式)。

通过TransactionTemplate并配合使用事务回调TransactionCallback指定具体的持久化操作,就可以通过编程方式实现事务管理,而无须关注资源获取、复用、释放、事务同步和异常处理等操作。



<!--配置一个dataSource的数据源--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"/><!--基于数据源的事务管理器--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"          p:dataSource-ref="dataSource"/><!--引用数据源--





程序汪往期精彩文章包含答案





程序汪最近整理的BAT大小厂面试题2019 (面试题目录推荐)

目录:我把精华文章都整理出来了

2019年换工作面试总结

2020年程序汪回复程序员小白11问,祝大家都能高薪

讲述:一个月薪 12000 的北京程序员的真实生活

SQL语句大全,所有的SQL都在这里

天真!这简历一看就是包装过的

终于见识到12306 的架构到底有多“牛逼”?

程序汪2019的总结,认识了很多朋友赚了些小钱,现在分享出来


给个[在看],是对程序汪最大的支持
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存