顺丰一面-凉经
是在一间小房子里面的,声音很嘈杂,面试官很多
【0】首先是自我介绍
【1】你对容器类,比如HashMap有什么了解
HashMap底层是数组加链表,首先利用hashcode计算地址,当发生冲突的时候用拉链法解决冲突,当拉链足够长的时候将其转化为红黑树。如果是要线程安全,建议使用ConcurrentHashmap而不是hashtable,因为前者是分段加锁的,后者只用了个synchronized。
【2】你是怎么理解容器的线程安全和线程不安全的,里面是做了什么实现
容器的线程安全实现主要的实现还是加锁。如果是线程不安全,就是没加锁,可能会出现并发的问题,如果是线程安全就做了加锁的操作,举例了concurrenthashmap和hashtable以及arraylist,linkedlist和vector
【3】了解可重入锁吗
一个线程如果拿到了这个锁之后,释放了,接下来的代码里还可以重新拿到这个锁。但是普通的锁是不行的。
【4】可重入锁用来解决一些什么样的问题
出于业务需求,需要对一个资源有频繁的调度,所以需要让他有可重入的功能(可能回答的不大准确)
【5】怎么理解乐观锁和悲观锁
乐观锁假设不会出现并发问题,一旦出现并发问题是没法解决的。通常用的方法有版本记录法等,这个方法也是Es中间件经常用到的写入方法。当写入的时候版本发生变化了,说明这个数据的状态和我们之前操作的数据不是一致的状态了。
悲观锁认为一定会发生这些问题,我们需要做好防范。比如悲观锁对于数据库的那几种不一致状态,读未提交,脏读,幻读,不可重复读等等,需要给他加锁。比如:读之前加S锁,写之前加X锁。
【6】如何避免死锁 ;银行家算法。让资源变成非竞争的,资源编号法,只能按序号重小到大申请资源;不允许线程占有并申请资源,只能一次申请全部
【7】如果有三个线程,一个只能打印a,一个只能打印b,一个只能打印c,如何确保有序
用并发控制,设置资源变量,当值为1时只能打印a,为2时只能打印b,为3时只能打印c,每次打印完后给资源+1并且求余3;
【8】对于线程池有了解么,简单说说
线程池其实就是一种多线程处理形式,相比手动创建线程,它的优势在于能够根据软硬件资源对线程进行统一的管理,而且统一创建线程,销毁线程,从单个线程上看,使用线程的开销变为了执行任务的开销,节约了创建和销毁的开销
【9】线程池的核心参数你知道么?
线程池的创建接口:ThreadPoolExecutor
核心参数:
1:核心线程数(corePoolSize)
核心线程数的设计需要依据任务的处理时间和每秒产生的任务数量来确定,例如:执行一个任务需要0.1秒,系统百分之80的时间每秒都会产生100个任务,那么要想在1秒内处理完这100个任务,就需要10个线程,此时我们就可以设计核心线程数为10;当然实际情况不可能这么平均,所以我们一般按照8020原则设计即可,既按照百分之80的情况设计核心线程数,剩下的百分之20可以利用最大线程数处理;
2:任务队列长度(workQueue)
任务队列长度一般设计为:核心线程数/单个任务执行时间*2即可;例如上面的场景中,核心线程数设计为10,单个任务执行时间为0.1秒,则队列长度可以设计为200;
3:最大线程数(maximumPoolSize)
最大线程数的设计除了需要参照核心线程数的条件外,还需要参照系统每秒产生的最大任务数决定:例如:上述环境中,如果系统每秒最大产生的任务是1000个,那么,最大线程数=(最大任务数-任务队列长度)*单个任务执行时间;既: 最大线程数=(1000-200)*0.1=80个;
4:最大空闲时间(keepAliveTime)
这个参数的设计完全参考系统运行环境和硬件压力设定,没有固定的参考值,用户可以根据经验和系统产生任务的时间间隔合理设置一个值即可;
【10】用过Mysql么?有哪些存储引擎?有什么区别
MyISAM和MyISam
MyISAM: 默认表类型,它是基于传统的ISAM类型,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键。InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。
【11】说一说innodb的底层实现。
【12】针对sql语句怎么进行优化
【13】inner join,左连接,右连接等有什么区别?基于什么样的考虑,去确定使用各种连接
【14】建索引的依据时什么?(explain查瓶颈)
【15】了解计算机网络么?tcp和udp的区别
【16】讲讲三次握手和四次握手
【17】TCP粘包的原因以及如何避免
【18】你在项目中用到了es,kafka,quartz等,那么你在项目中主要实现了什么功能
【19】定时任务计算热帖排行,你是怎么计算的,整个过程讲一下?定时任务是什么时候启动的?
【20】Redis也支持做排行榜功能,你能简单说说么
【21】在项目中遇到的挑战,难点
ps:来自23年的面试凉经,那年似乎不咋招人,后来也毁约了不少#软件开发笔面经#
#牛客解忧铺##24届软开秋招面试经验大赏##如何判断面试是否凉了#
【0】首先是自我介绍
【1】你对容器类,比如HashMap有什么了解
HashMap底层是数组加链表,首先利用hashcode计算地址,当发生冲突的时候用拉链法解决冲突,当拉链足够长的时候将其转化为红黑树。如果是要线程安全,建议使用ConcurrentHashmap而不是hashtable,因为前者是分段加锁的,后者只用了个synchronized。
【2】你是怎么理解容器的线程安全和线程不安全的,里面是做了什么实现
容器的线程安全实现主要的实现还是加锁。如果是线程不安全,就是没加锁,可能会出现并发的问题,如果是线程安全就做了加锁的操作,举例了concurrenthashmap和hashtable以及arraylist,linkedlist和vector
【3】了解可重入锁吗
一个线程如果拿到了这个锁之后,释放了,接下来的代码里还可以重新拿到这个锁。但是普通的锁是不行的。
【4】可重入锁用来解决一些什么样的问题
出于业务需求,需要对一个资源有频繁的调度,所以需要让他有可重入的功能(可能回答的不大准确)
【5】怎么理解乐观锁和悲观锁
乐观锁假设不会出现并发问题,一旦出现并发问题是没法解决的。通常用的方法有版本记录法等,这个方法也是Es中间件经常用到的写入方法。当写入的时候版本发生变化了,说明这个数据的状态和我们之前操作的数据不是一致的状态了。
悲观锁认为一定会发生这些问题,我们需要做好防范。比如悲观锁对于数据库的那几种不一致状态,读未提交,脏读,幻读,不可重复读等等,需要给他加锁。比如:读之前加S锁,写之前加X锁。
【6】如何避免死锁 ;银行家算法。让资源变成非竞争的,资源编号法,只能按序号重小到大申请资源;不允许线程占有并申请资源,只能一次申请全部
【7】如果有三个线程,一个只能打印a,一个只能打印b,一个只能打印c,如何确保有序
用并发控制,设置资源变量,当值为1时只能打印a,为2时只能打印b,为3时只能打印c,每次打印完后给资源+1并且求余3;
【8】对于线程池有了解么,简单说说
线程池其实就是一种多线程处理形式,相比手动创建线程,它的优势在于能够根据软硬件资源对线程进行统一的管理,而且统一创建线程,销毁线程,从单个线程上看,使用线程的开销变为了执行任务的开销,节约了创建和销毁的开销
【9】线程池的核心参数你知道么?
线程池的创建接口:ThreadPoolExecutor
核心参数:
1:核心线程数(corePoolSize)
核心线程数的设计需要依据任务的处理时间和每秒产生的任务数量来确定,例如:执行一个任务需要0.1秒,系统百分之80的时间每秒都会产生100个任务,那么要想在1秒内处理完这100个任务,就需要10个线程,此时我们就可以设计核心线程数为10;当然实际情况不可能这么平均,所以我们一般按照8020原则设计即可,既按照百分之80的情况设计核心线程数,剩下的百分之20可以利用最大线程数处理;
2:任务队列长度(workQueue)
任务队列长度一般设计为:核心线程数/单个任务执行时间*2即可;例如上面的场景中,核心线程数设计为10,单个任务执行时间为0.1秒,则队列长度可以设计为200;
3:最大线程数(maximumPoolSize)
最大线程数的设计除了需要参照核心线程数的条件外,还需要参照系统每秒产生的最大任务数决定:例如:上述环境中,如果系统每秒最大产生的任务是1000个,那么,最大线程数=(最大任务数-任务队列长度)*单个任务执行时间;既: 最大线程数=(1000-200)*0.1=80个;
4:最大空闲时间(keepAliveTime)
这个参数的设计完全参考系统运行环境和硬件压力设定,没有固定的参考值,用户可以根据经验和系统产生任务的时间间隔合理设置一个值即可;
【10】用过Mysql么?有哪些存储引擎?有什么区别
MyISAM和MyISam
MyISAM: 默认表类型,它是基于传统的ISAM类型,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键。InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。
【11】说一说innodb的底层实现。
【12】针对sql语句怎么进行优化
【13】inner join,左连接,右连接等有什么区别?基于什么样的考虑,去确定使用各种连接
【14】建索引的依据时什么?(explain查瓶颈)
【15】了解计算机网络么?tcp和udp的区别
【16】讲讲三次握手和四次握手
【17】TCP粘包的原因以及如何避免
【18】你在项目中用到了es,kafka,quartz等,那么你在项目中主要实现了什么功能
【19】定时任务计算热帖排行,你是怎么计算的,整个过程讲一下?定时任务是什么时候启动的?
【20】Redis也支持做排行榜功能,你能简单说说么
【21】在项目中遇到的挑战,难点
ps:来自23年的面试凉经,那年似乎不咋招人,后来也毁约了不少#软件开发笔面经#
#牛客解忧铺##24届软开秋招面试经验大赏##如何判断面试是否凉了#
全部评论
哇,牛可乐听了你的面试经历,感觉你准备得很充分呢!面试中遇到这么多问题,一定很不容易吧。🐮🍀
1. 关于HashMap的回答很棒,不过牛可乐有个小问题,你在项目中有没有遇到过需要用到HashMap的场景呢?
2. 听你讲解线程安全和线程不安全,牛可乐觉得你理解得很深刻。对了,你在项目中有没有用到过线程安全的容器,能分享一下经验吗?
3. 可重入锁和乐观锁、悲观锁的讲解也很清楚。牛可乐好奇,你在实际编程中有没有遇到过需要用到这些锁的情况呢?
4. 哎呀,面试中遇到这么多问题,牛可乐猜你可能有点累了吧。休息一下,喝杯水,然后我们继续聊聊。😊
5. 牛可乐看到你提到了线程池,这个真的很重要!你在项目中是如何使用线程池的,能分享一些经验吗?
6. 对于MySQL的存储引擎,你讲解得很详细。牛可乐想问问,你在项目中是如何选择存储引擎的?
7. 哎呀,面试的经历真是让人紧张呢。不过没关系,牛可乐在这里陪着你。🌈如果你愿意的话,可以点击牛可乐的头像,我们私信聊聊,牛可乐可以帮你分析一下面试中的亮点和需要改进的地方哦!
8. 最后,面试虽然有点波折,但是你的努力和准备都是值得肯定的!牛可乐相信你一定能够找到心仪的工作的。加油哦!🚀
(点击牛可乐头像,私信聊天吧~)
这怎么是凉经
半个小时 问了这么多吗
相关推荐