- 浏览: 394806 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
引用
马老师说过,员工的离职原因很多,只有两点最真实:
•钱,没给到位
•心,受委屈了
当然,我是想换个平台,换个方向,想清楚为什么要跳槽,如果真的要跳槽,想要拿到一个理想的offer,除了运气,基本功也要足够的扎实,希望下面的面试经验能给你们能够提供一些帮助。
项目经验
面试官在一开始会让你进行自我介绍,主要是想让你介绍一下自己做过的一些项目,看看你对这些项目的了解程度,因为很多人简历上写的项目并非都是从头到尾都参与的,有些只是参与并实现了其中的一些模块而已,或是接手维护别人的项目,所以在你简历上所写的和面试过程中所说的项目经验,你自己必须能够了解来龙去脉,因为面试官肯定会根据你的项目描述,对项目中的实现原理,或为什么要这样实现进行提问,这时不至于木讷住而不知如何作答,如此局面只会大大降低面试分。
场景对话:
面试官:(拿着简历)讲讲你最近做的这个项目
我:&……%¥#*&¥@%¥!,说了一大通(不知道面试官听进去多少,面试官会挑他会的进行提问)
面试官:你说这个项目中用到了netty,能大概讲讲netty的线程模型么?
我:(幸好我看过netty的源码)netty通过Reactor模型基于多路复用器接收并处理用户请求(能讲就多讲一点),内部实现了两个线程池,boss线程池和work线程池,其中boss线程池的线程负责处理请求的accept事件,当接收到accept事件的请求时,把对应的socket封装到一个NioSocketChannel中,并交给work线程池,其中work线程池负责请求的read和write事件(通过口述加画图的方式,把请求的执行过程大概描述了一遍,时间有限,也不可能把所有的细节都说完,挑重点讲,挑记忆深刻的讲)
面试官:嗯,理解的还挺深入的…那你在做这个项目时有没有遇到什么困难,或者是觉得有挑战的地方?
我:(这时面试官想让你自己出题自己回答了,所以一定要回答,不回答就突显不出你这个项目了,要是这个问题没有准备过,只能临时发挥了,当然我就是属于临时发挥的)稍微想一下,因为之前确实碰到了这个问题,当时做这个项目时,对netty的不过熟悉,把请求的业务逻辑放在work线程池的线程中进行处理,进行压测的时候,发现qps总是上不去,后来看了源码之后才发现,由于业务逻辑的处理比较耗时,完全占用了work线程池的资源,导致新的请求一直处于等待状态。
面试官:那最后是如何解决的?
我:最后把处理业务的逻辑封装成一个task提交给一个新建的业务线程池中执行,执行完之后由work线程池执行请求的write事件。
面试官:好的,你知道nio中selector可能触发bug么?
我:嗯,对的,selector的select方法,因为底层的epoll函数可能会发生空转,从而导致cpu100%。
面试官:那如何解决该问题?
我:这个问题在netty已经解决了,通过&^%&$^(把netty的解决方案说一遍)
面试官:嗯,对了,你们这个项目有给自己定指标么?
我:有的,&&…………¥¥##@,把自己项目的指标说了一通,如何进行AB实验,如何迭代优化指标
面试官:嗯,好的 ,项目的问题先到这里,我们来考察一下java的基本点吧。
如上只是本人所做的一个项目,当然了,具体项目具体分析,也不是每个面试官问的点都一样,如果面试官不懂netty,自然会挑别的问题进行提问,不过你也可以尝试着把问题往自己熟悉的方向去靠。
面试知识点
1、线程池
线程池的实现原理,这个知识点真的很重要,几乎每次面试都会被问到,一般的提问方式有如下几种:
1、“讲讲线程池的实现原理”
2、“线程池中的coreNum和maxNum有什么不同”
3、“在不同的业务场景中,线程池参数如何设置”
场景对话:
面试官:平时线程池用的多么?
我:嗯,我的*项目中就用到了
面试官:那好,你讲讲线程池的实现原理
我:(还好我之前看过源码,但是时间久远有点模糊了),能给我笔和纸么,我画图分析给你看看,&&¥&假设初始化一个线程池,核心线程数是5,最大线程数是10@@@
面试官:嗯,好的,你继续…
我:在纸上画了正方形,这个代表一个线程池,初始化的时候,里面是没有线程的
面试官:嗯,好的,你继续…
我:又画了一个细长的长方形,这个代表阻塞队列,一开始里面也是没有任务的
面试官:嗯,好的,你继续…
我:当来了一个任务时,在正方形中画了一个小圆圈,代表初始化了一个线程,如果再来一个任务,就再画一个圆圈,表示再初始化了一个线程,连续画了5个圆圈之后,如果第6个任务过来了…
面试官:嗯,好的,你继续…
我:这时会把第6个任务放到阻塞队列中..
面试官:嗯,然后呢?
我:现在线程池中不是有5个线程了么,如果其中一个线程空闲了,就会从阻塞队列中获取第6个任务,进行执行..
面试官:嗯,对的,那如果任务产生的速度比消费的速度快呢?
我:如果线程池的5个线程都在running状态,那么任务就先保存在阻塞队列中
面试官:如果队列满了,怎么办?
我:如果队列满了,我们不是设置了最大线程数是10么,而线程池中只有5个线程,这时会新建一个线程去执行不能保存到阻塞队列的任务,然后我又在正方形中画了5个圆圈。
面试官:那如果线程池中的线程数达到10个了,阻塞队列也满了,怎么办?
我:这种情况通过自定义reject函数去处理这里任务了,舒了一口去,以为问完了…
面试官:好的,那如果运行一段时间之后,阻塞队列中的任务也执行完了,线程池中的线程会怎么样?
我:…这个好像超过核心线程数的线程会在空闲一段时间内自动回收…因为有点不记得这个逻辑了,回答的有点虚…
面试官:好的,那这种情况在什么场景下会发生?
我:(有时候真是笨啊,很多东西都知道,但是在面试的时候一紧张,全忘记)这个…那个…我好像没有遇到过这样的情况
面试官:嗯,好的,你回去之后再好好想想
我:……..
我居然忘记了秒杀这个场景
线程池分析的文章:
深入分析java线程池的实现原理
2、锁的实现
在关于锁的面试过程中,一般主要问Synchronized和ReentrantLock的实现原理,更有甚者会问读写锁。
场景对话:
面试官:都了解Java中的什么锁?
我:比如Synchronized和ReentrantLock…读写锁用的不多,就没研究了(我就怕被问读写锁,因为一直没去看)
面试官:那好,你先说说Synchronized的实现原理吧
我:嗯,Synchronized是JVM实现的一种锁,其中锁的获取和释放分别是monitorenter和monitorexit指令,该锁在实现上分为了偏向锁、轻量级锁和重量级锁,其中偏向锁在1.6是默认开启的,轻量级锁在多线程竞争的情况下会膨胀成重量级锁,有关锁的数据都保存在对象头中…&&@@#,(嗯,说了一大堆,面试官也没打断我)
面试官:哦,嗯,理解的还挺透彻,那你说说ReentrantLock的实现吧…
我:ReentrantLock是基于AQS实现的
面试官:什么是AQS?
我:在AQS内部会保存一个状态变量state,通过CAS修改该变量的值,修改成功的线程表示获取到该锁,没有修改成功,或者发现状态state已经是加锁状态,则通过一个Waiter对象封装线程,添加到等待队列中,并挂起等待被唤醒&&&$$(又说了一堆)
面试官:能说说CAS的实现原理么?
我:CAS是通过unsafe类的compareAndSwap方法实现的(心里得意的一笑)
面试官:哦,好的,那你知道这个方法的参数的含义的么?
我:(这是在逼我啊…努力的回想,因为我真的看过啊)我想想啊,这个方法看的时间有点久远了,第一个参数是要修改的对象,第二个参数是对象中要修改变量的偏移量,第三个参数是修改之前的值,第四个参数是预想修改后的值….(说出来之后都有点佩服自己,这个都记得,不过面试官好像还是不肯放过我…)
面试官:嗯,对的,那你知道操作系统级别是如何实现的么?
我:(我去你大爷…)我只记得X86中有一个cmp开头的指令,具体的我忘记了…
面试官:嗯,好,你知道CAS指令有什么缺点么
我:哦,CAS的缺点是存在ABA问题
面试官:怎么讲?
我:就是一个变量V,如果变量V初次读取的时候是A,并且在准备赋值的时候检查到它仍然是A,那能说明它的值没有被其他线程修改过了吗?如果在这段期间它的值曾经被改成了B,然后又改回A,那CAS操作就会误认为它从来没有被修改过。
面试官:那怎么解决?
我:(有完没完了啊…我的心里是崩溃的)针对这种情况,java并发包中提供了一个带有标记的原子引用类”AtomicStampedReference”,它可以通过控制变量值的版本来保证CAS的正确性。
面试官:嗯,好的,这个问题到此为止,我们再看看别的
我:….我能喝口水么
关于锁分析的文章,希望对大家有用:
深入浅出java同步器AQS
java中的CAS
深入浅出synchronized
深入浅出ReentrantLock
java中的Unsafe
java volatile关键字解惑
深入分析Object.wait/notify实现机制
深入分析synchronized的JVM实现
3、ConcurrentHashMap
当考察数据结构时,面试官一开始会问HashMap的实现原理,当你说出HashMap并非线程安全之后,会让你自己引出ConcurrentHashMap,接着就可能开始如下的对话。
场景对话:
面试官:谈谈ConcurrentHashMap实现原理
我:@#¥@@基于分段锁的%%¥#@#¥,但是1.8之后改变实现方式了
面试官:1.8啥方式
我:把1.8的实现原理说了一通,其中提到了红黑树…
面试官:能讲下红黑树的概念吗
我:红黑树是一种二叉树,并且是平衡……%……¥……,
面试官:能讲下红黑树的。。。。。
我:打住,别问了,红黑树我只知道他是二叉树,比其他树多一个属性,其他的我都不知道
面试官:好的,那换个,你知道它的size方法是如何实现的么?
我:size方法?是想要得到Map中的元素个数么?
面试官:对的….
我:我记得好像size方法返回是不准确的,平时也不会用到这个方法…
面试官:如果你觉得size方法返回值不准确,那如果让你自己实现,你觉得应该怎么实现呢?
我:…@#¥@@…两眼一黑
我:等等,让我想想…..应该可以用AtomicInteger变量进行记录…嗯,对的,每次插入或删除的时候,操作这个变量,我得意的一笑…
面试官:哦,是么,那如果我觉得这个AtomicInteger这个变量性能不好,还能再优化么?
我:懵逼脸…(当时居然把volitile变量给忘记了)…好像没有了,我想不出来了…
面试官:哦,那回头你再看看源码吧,jdk中已经实现了…
我:哦,是么….
面试官:那今天的面试到此结束,我们后面会通知你。
我:………………
关于ConcurrentHashMap,本人也写过不少的分析文章,希望对大家有用:
相关推荐
关于找工作的10个忠告PPT.pptx
这份名为“关于找工作的10个忠告PPT”的压缩包文件,旨在提供一份详尽的指导,帮助求职者更好地规划自己的职业道路。以下是根据标题、描述和内容列表提炼出的关键知识点: 1. 明确目标:首先,你需要清晰地知道自己...
"关于求职感谢信合集七篇" 在本文中,我们可以总结出以下知识点: 1. 求职感谢信的重要性:通过这七篇感谢信,我们可以看到,求职者对面试的感谢和祝福,是非常重要的。它不仅表明了求职者的礼貌和感激,还体现了...
这是一份关于找工作的10个忠告PPT,共13张。第一PPT模板网提供优秀幻灯片作品欣赏;
献给辛苦找工作的同学们,关于找工作的十个忠告,找工作应该注意的十点忠告ppt模板。
【标题】:“关于求职招聘的小程序(包含前后端)” 【描述】中提到的“求职招聘小程序”是一种基于移动端的应用程序,它集成了前端用户界面和后端服务器处理,为求职者和雇主提供了一个便捷的交互平台。在这个小...
关于求职与就业情况的调查报告揭示了现代求职者在寻找工作时的关注点、期望值以及面临的现实挑战。报告中提到的几个关键知识点包括: 1. **调查对象与年龄分布**:大多数受访者为18至25岁的年轻人,占比80%,其次是...
为了检查学术职位的公平性,针对学术职位(例如助理教授,主席,院长,校长)的广告来源(例如,APA心理学监测,高等教育工作,的确,高等教育纪事)进行审查,以找出与特定学术职位相关的“必需”和“首选”资格的...
关于找工作的自我评价参考.doc
关于找工作的10个忠告PPT模板.pptx
这份名为“关于找工作的10个忠告”的PPT资源,旨在为求职者提供实用的指导和建议。以下是根据PPT标题和描述总结出的十个关键知识点,以及如何应用它们来优化你的求职策略。 1. **自我定位**:明确自己的职业目标,...
在找工作的过程中,应聘经验、笔试试题、招聘流程、薪资待遇以及企业的用人计划都是求职者需要关注的重要方面。以下是对这些关键知识点的详细解读: 1. 应聘经验:应聘经验是个人在求职过程中积累的各类实战经历,...
毕业了,正在找工作,或是将要找工作,看看这个,有帮助的!
找工作是一项需要系统性规划和个人能力展示的过程,涵盖了从网申、简历编写到面试等多个环节。以下将详细解析这些环节中的关键知识点。 首先,"网申"是求职过程的第一步,通常涉及在线填写申请表格或通过招聘网站...
首先,求职准备及技巧是关于求职过程中需要的材料准备和心理准备。在求职前,学生必须对自己的技能和兴趣进行全面的评估,并且了解不同行业的就业情况。这一过程需要学生进行认真的自我定位和职业规划,这是求职成功...
关于如何编写简历和快速获取面试机会 简历制作 如何投递 面试对话场景等等
04年毕业,还没有单干的资本,我分析我自己也不适合单干,一直在打工,也倾向于一辈子打工。我工作快两年了,回顾一下自己的经历,写了点东西。大家也一起来说说经验吧,共同交流一下,互相促进,增长一点本领
### 关于找工作的10个忠告 #### 1. **明确职业目标** - 在求职前,首先需要明确自己的职业目标,包括想要从事的行业、职位以及长期的职业规划等。这有助于在众多机会中做出更加合适的选择。 - 可以通过自我评估工具...
该标题表明这是一个关于2023年毕业生找工作面试的PPT分享,旨在为毕业生提供找工作面试的经验和建议。 描述:2023年毕业生找工作面试PPT分享 该描述进一步强调了该PPT的目的,即为毕业生提供找工作面试的经验和...
以下是关于求职材料的制作及面试的要点: 一、求职材料的作用 求职材料的主要目的是争取面试机会,让收件者了解自己的条件和能力。为了达到这个目的,求职者需要设法展现自己的才能,瞬间抓住未来雇主的注意力,...