疫情当下,帮公司远程技术电话面试java期望1万7千程序员
面试视频版本在 B站,欢迎大家观看
B站就是下面账号
视频可能更有感觉哦
面试的答案在本文章
建议大家先看视频,然后看自己能否回答上
回答不上的回头看看本文章效果更好哦
面试的日子里有程序汪的面试视频和文章,面试不慌了(这广告打的)
这也算模拟面试吧,谢谢大家支持,
这是所有程序员面试的第一个问题
自我介绍
程序汪说下注意点吧
一定要把自己的优势说在前面,如学历高英语,就先把自己我是985XX高校 或 XX一本 英语8级,如果自己学历差就简单说大专 大学就行
项目啊,一定要重点介绍你做过哪些项目,面试官招人都是非常非常看重项目实战经验的,项目背后有什么技术
会找面试官感兴趣的话题聊,比如你面试的是类似美团这样的O2O互联网公司,你面试前肯定要做下功课,比较美团 是分布式微服务 数据库主要用mysql 中间件主要用MQ 缓存主要是redis 业务主要是移动端的 有高并发场景,这样功课你在美团的招聘信息里就能找到。找到面试企业核心技术栈面试的时候你就可以多聊这些和公司息息相关的技术。
总结
优势放前面说
多说项目实战以及背后技术
找面试官感兴趣的技术话题
String是java程序员用的最频繁的核心类
建议大家把频繁使用的类多研究下
回答:String类为什么是final类型
为了实现字符串池(只有当字符是不可变的,字符串池才有可能实现)
为了线程安全(字符串自己便是线程安全的)
为了实现String可以创建HashCode不可变性(Map的key一般String用的最多原因就是这个)
很多人只知道final修饰了就不能变了,不能继承了
然后就没然后了
String被final修饰:注意是安全性和效率
还有一点很多初学者没搞明白
final修饰的对象只是引用地址不可变,内容还是能变的
相关String面试
String、stringBuffer
String里的toString() equals 方法实现
HashMap也是使用频率非常高的类,在面试中出现的概率也高
程序汪面试了很多人,发现大部分人对HashMap中的hashCode这个关键方法一无所知
这里简单总结下
数组+链表+(1.8增加了 红黑树)
搞懂hashCode作用
put和get的过程
hash冲突是什么
利用key的hashCode重新hash计算出当前对象的元素在数组中的下标
put存时,如果出现hash值相同的key,此时有两种情况。
a :如果key相同,则覆盖原始值;b: 如果key不同(hash冲突啦),则将当前的key-value放到链表中
get获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。
HashMap是如何解决hash冲突问题(数组+链表),核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。
相关HashMap面试题
18K程序员Java中的hashcode是干嘛的,居然不知道
Java 经典面试题:为什么 ConcurrentHashMap 的读操作不需要加锁?
为什么ConcurrentHashMap的读操作不需要加锁?
回复:jmap,jstack 的使用等等
这是考察平时排查问题工具使用情况,如果真不清楚也可以实话对面试官说
千万不要不懂装懂,一般面试官都很讨厌的
面试官:SpringMVC的UML时序图给我画下 程序员:我不会画
能把上面的流程图说清楚或当着面试官画出UML图
非常完美
考察对线程的熟悉度
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码
(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法
这里方法run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止
start方法可启动多线程
run方法只是thread的一个普通方法调用,还是在主线程里执行,是不会开启多线程的
下面文章已经讲过线程池原理了,程序汪的建议大家把线程池的原理图和核心参数好好理解下
帮公司面试1万到1.5万薪资的Java程序员,来看看我问什么
这个程序汪面试问的也比较频繁,因为实际项目开发中用的真不少
这些锁都是保证数据一致性
还有一个分布式锁,互联网项目中会用
80% 人不知道的 Redis 分布式锁的正确实现方式(Java 版)
程序汪介绍一个模式,其他还有很多比较简单的,
强烈建议大家把简单的设计模式一定要掌握几个
面试的时候也好不慌
这个问题其实比较泛
面试官一般问这样的问题注意想听下你的设计思路
高并发根据业务不一样处理都不一样复杂度也不一样
比如像12306那样超级复杂高并发
简单总结
添加负载均衡层,将请求均匀打到系统层。
系统层采用集群化部署多台机器,扛住初步的并发压力。
数据库分库分表 + 读写分离或微服务
缓存集群引入
数据库其实本身不是用来承载高并发请求的
比如说消息中间件技术,也就是MQ集群,是非常好的做写请求异步化处理,实现削峰填谷的效果。
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 (面试题目录推荐)