总结:
1、工作中认真对待每一个项目,写模拟程序增加并发量测试,优化项目增加稳定性。
2、增加分布式系统模块提取抽象思维
3、消息队列保证消费一次,分布式一致性等问题加强了解
项目:
印象深刻的项目,稳定性做了什么优化
虚拟机优化
分布式实操
消息队列面试题集合?
分布式框架面试题集合?(dubbo,spring cloud)
分布式事务面试题集合?
缓存redis,高可用,
多线程
-
Java 的信号灯?
-
synchronized 的实现原理以及锁优化?
-
volatile 的实现原理?
-
synchronized 在静态方法和普通方法的区别?
-
怎么实现所有线程在等待某个事件的发生才会去执行?
-
CAS?CAS 有什么缺陷,如何解决?
-
synchronized 和 lock 有什么区别?
-
Hashtable 是怎么加锁的 ?
-
HashMap 的并发问题?
-
ConcurrenHashMap 介绍?1.8 中为什么要用红黑树?
-
AQS
-
如何检测死锁?怎么预防死锁?
-
Java 内存模型?
-
如何保证多线程下 i++ 结果正确?
-
线程池的种类,区别和使用场景?
-
分析线程池的实现原理和线程的调度过程?
-
线程池如何调优,最大数目如何确认?
-
ThreadLocal原理,用的时候需要注意什么?
-
ConcurrentHashMap 和 HashTable 中线程安全的区别?为啥建议用 ConcurrentHashMap ?能把 ConcurrentHashMap 里面的实现详细的讲下吗?
-
保证线程安全的还有其他的方式吗?
-
讲下 Synchronized?
-
讲下 RecentLock 可重入锁? 什么是可重入锁?为什么要设计可重入锁?
-
Synchronized 和 RecentLock 有什么区别?这两个有没有深入了解源码?
-
讲下 Volatile 吧?他是怎样做到同步的?
-
Volatile 为什么不支持原子性?举个例子
-
Atomic 怎么设计的?有用过里面的类吗?
-
线程安全类和线程不安全的类,项目使用的时候你会怎么选择?怎么判断项目代码哪里会有线程不安全问题?
-
Map、List、Set 分别说下你了解到它们有的线程安全类和线程不安全的类?
-
TreeSet 清楚吗?能详细说下吗?
-
ThreadLocal 了解吗?项目有用过吗?可以说说
JUC 里面你还知道什么其他的类吗?比如 CountDownLatch、Condition -
从源码详细说下 Java 里面的线程池吧,使用线程池有什么要注意的地方?你们公司有规范吗?
-
详细jvm内存模型
-
讲讲什么情况下回出现内存溢出,内存泄漏?
-
说说Java线程栈
-
JVM 年轻代到年老代的晋升过程的判断条件是什么呢?
-
JVM 出现 fullGC 很频繁,怎么去线上排查问题?
-
类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?
-
类的实例化顺序
-
JVM垃圾回收机制,何时触发MinorGC等操作
常见面时套路问题
- 自我介绍
- 你总结下自身优缺点?
- 你有哪些offer
- 你为什么要离开商家公司
- 上家公司的同事和领导怎么评价你的
- 介绍下你的上家公司是做哪块的吧
- 在上家公司你做了哪些项目?
- 你在项目中是什么角色?
- 这个项目的数据量和并发量多大?
- 这个项目用的什么技术?
- 项目过程中有遇到什么很印象深刻的问题吗?
- 是怎么解决的这些问题?
- 项目有没有还可以继续优化的地方?
- 该怎么优化?有什么思路没?
- 叫你设计一个并发xxx,数据存储量xxx 量级的系统,你该如何设计?从你知道的点尽可能的多说出些?
1.Java IO流的层次结构?
2.请说出常用的异常类型?
3.SKU的全称是什么,SKU与SPU的区别及关系?
4.FileInputStream 在使用完以后,不关闭流,想二次使用可以怎么操作?
5.设计一个分步式登录系统?
6.Spring加载过程?
7.自己有没有写过类似Spring这样的AOP事务?
8.Java中 try..catch 关闭流的语法糖?
9.如何设计一个秒杀系统?要考虑什么?
10.有没有遇到进线上GC,出现的症状是什么样的,怎么解决的?
11spring的加载过程?
12.atomic 与 volatile的区别?
13.Thread的 notify()给notifyAll()的区别?
14.notifiy()是唤醒的那一个线程?
15.Thread.sleep()唤醒以后是否需要重新竞争?
16.单例有多少种写法? 有什么区别? 你常用哪一种单例,为什么用这种?
17.问一个Thread.join()相关的问题?
18.商品相关模块系统怎么设计数据模型?
19.写一个JAVA死锁的列子?
20.如何解决死锁?
21.GC回收算法,及实现原理?
22.HashMap数据存储结构? key重复了怎么办? 是如何解决的?
23.Spring AOP的实现原理,底层用什么实现的?
阿里技术面试2
电话面试主要考察3块内容:
Java的相关基础知识,开源框架的原理,JVM,多线程,高并发,中间件等;
之前项目经历,运用的技术,遇到的问题,如何解决,个人有什么收获和成长;
对于技术的热情(平时是否看些技术书籍,逛论坛,写博客,写源代码或程序等);
JAVA开发技术面试可能问到的问题?
我们主要考核的是网络nio 分布式数据库高并发大数据
自定义表格的实现?
动态表单设计?
in-jvm(必考)以及jmm缓存模型如何调优?
常用的RPC框架
nio和io
并发编程,设计模式
地图组件?
hashmap有什么漏洞会导致他变慢?
如何给hashmap的key对象设计他的hashcode?
泛型通配符?在什么情况下使用?
后端方面:redis?分布式框架dubbo(阿里巴巴开源框架)?设计模式?
场景式的问题:秒杀,能列出常见的排队、验证码、库存扣减方式对系统高并发的影响?
能根据实际的需要构建缓存结构提高提高网站的访问速度,熟练使用ehcache、oscache,了解memcache。
了解基于dns轮询的负载均衡,熟练配置web服务器实现负载均衡,程序级能综合使用基于hash或取模等手段实现软负载。
熟悉分布式数据库设计和优化技术,熟练使用mysql、oracle、SqlServer等主流数据库,熟悉hadoop hbase mangodb redis ehcache、oscache memcache。对于大数据量的数据库处理采用分表分库、数据库读写分离、建立缓存等手段优化性能。
熟练掌握lucene,能基于lucene开发大型的搜索引擎,并能用lucene来改善和优化数据库的like查询。
JAVA方向技术考察点(补充):
掌握Java编程语言,包含io/nio/socket/multi threads/collection/concurrency等功能的使用;
熟练掌握jvm(sun hotspot和ibm j9)内存模型、gc垃圾回收调优等技能;
精通JVM,JMM,MVC架构,熟练使用struts2。
熟练使用spring、struts、ibatis构建应用系统。
熟练使用Servlet,jsp,freemark等前端技术。
熟练使用axis搭建基于SOAP协议的WebService服务接口。
熟练使用MAVEN构建项目工程。
熟练使用tomcat等web服务。
熟练使用mysql等关系型数据库,熟悉mysql集群搭建。
熟练使用redis等NOSQL技术。
熟悉tcp、http协议。
熟悉nginx、haproxy等配置。
熟悉javascript、ajax等技术。
熟悉主流分布式文件系统FastDFS等。
熟悉JMS,可熟练使用ActiveMQ。
Java技术Leader要求能够对于项目本身知其然知其所以然,不仅技术功力深还要业务能力强有很好的idea和业务sense,并且对技术充满兴趣和渴望,千万不要面试官问一个问题答一个,呆板的表情完全看不出任何自己的想法。
面试中描述你做的每一个项目:你做了什么工作?这些工作你解决了什么问题?还有什么困难没有解决?这些困难在后续如何优化?优化后可以实现什么功能?这些功能如何和中间件和分布式并行系统联系在一起??Java中间件方向消息的传输方式mq长连接短连接
Java 虚拟机有什么优化?
底层计算机理解内存管理/数据挖掘系统
可靠性和可用性如何理解~
jsp 和sever lap对比
数据库到界面,字符集转化
基栈
jvm优化cup高的时候如果分析和监控
java curb突出细节问题
分布式缓存文档如何分流
迁移数据库垂直分割
高并发如何处理前端高并发应用层
LB设计load balance
负载均衡
防网络攻击
数据日志事件监控后通知
数据库事务实现的底层机制
字符串空格输入的网络攻击
Quartz框架的底层原理
数据库同步中不通过数据库引擎直接读日志等方式同步数据
如果你想学好JAVA这门技术,也想在IT行业拿高薪,可以进来看看 ,群里有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。
如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,群号:587372254 (小白和广告勿扰)
阿里面试题
二叉树的遍历方式,前序、中序、后序和层序
volatile关键字
synchronized
concurrentHashMap
锁的优化策略
操作系统
项目部分
缓存的使用,如果现在需要实现一个简单的缓存,供搜索框中的ajax异步请求调用,使用什么结构?
内存中的缓存不能一直存在,用什么算法定期将搜索权重较低的entry去掉?
TCP如何保证安全性
红黑树的问题,B+数
JDK1.8中对HashMap的增强,如果一个桶上的节点数量过多,链表+数组的结构就会转换为红黑树。
项目中使用的单机服务器,如果将它部署成分布式服务器?
MySQL的常见优化方式、定为慢查询
手写一个线程安全的单例模式
进阿里必会知识:
算法和数据结构数组、链表、二叉树、队列、栈的各种操作(性能,场景)
二分查找和各种变种的二分查找
各类排序算法以及复杂度分析(快排、归并、堆)
各类算法题(手写)
理解并可以分析时间和空间复杂度。
动态规划(笔试回回有。。)、贪心。
红黑树、AVL树、Hash树、Tire树、B树、B+树。
图算法(比较少,也就两个最短路径算法理解吧)
计算机网络OSI7层模型(TCP4层)每层的协议
url到页面的过程
HTTPhttp/https 1.0、1.1、2.0
get/post 以及幂等性
http 协议头相关
网络攻击(CSRF、XSS)
TCP/IP三次握手、四次挥手
拥塞控制(过程、阈值)
流量控制与滑动窗口
TCP与UDP比较
子网划分(一般只有笔试有)
DDos攻击
(B)IO/NIO/AIO三者原理,各个语言是怎么实现的
Netty
Linux内核select poll epoll
数据库(最多的还是mysql,Nosql有redis)索引(包括分类及优化方式,失效条件,底层结构)
sql语法(join,union,子查询,having,group by)
引擎对比(InnoDB,MyISAM)
数据库的锁(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁,以及加锁的select sql方式)
隔离级别,依次解决的问题(脏读、不可重复读、幻读)
事务的ACID
B树、B+树
优化(explain,慢查询,show profile)
数据库的范式。
分库分表,主从复制,读写分离。
Nosql相关(redis和memcached区别之类的,如果你熟悉redis,redis还有一堆要问的)
操作系统:进程通信IPC(几种方式),与线程区别
OS的几种策略(页面置换,进程调度等,每个里面有几种算法)
互斥与死锁相关的
linux常用命令(问的时候都会给具体某一个场景)
Linux内核相关(select、poll、epoll)
编程语言(这里只说Java):把我之后的面经过一遍,Java感觉覆盖的就差不多了,不过下面还是分个类。
Java基础(面向对象、四个特性、重载重写、static和final等等很多东西)
集合(HashMap、ConcurrentHashMap、各种List,最好结合源码看)
并发和多线程(线程池、SYNC和Lock锁机制、线程通信、volatile、ThreadLocal、CyclicBarrier、Atom包、CountDownLatch、AQS、CAS原理等等)
JVM(内存模型、GC垃圾回收,包括分代,GC算法,收集器、类加载和双亲委派、JVM调优,内存泄漏和内存溢出)
IO/NIO相关
反射和代理、异常、Java8相关、序列化
设计模式(常用的,jdk中有的)
Web相关(servlet、cookie/session、Spring
作者:Java后端技术的博客
来源:CSDN
原文:https://blog.csdn.net/gupaoxueyuan/article/details/79915166
版权声明:本文为博主原创文章,转载请附上博文链接!
宏观方面
一、 JAVA。要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您 对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经 了。
二、 设计模式。其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代 码往往要借助一些设计模式。当然长期的代码经验积累,只要您用心,会使您形成自己代码风格。相信您的代码也比较符合代码的可重用性,可维护性,可扩展性。 但既然前人已经给我们总结出了经验,我们何不踩着前人的肩膀前进?
三、 XML。现在的系统中不使用XML几乎是不可能的。XML的功能非常强大,它可以做数据转换、做系统的配置、甚至可保存您的系统业务数据。因此您必须了解 XML,包括它的语法,结构。您还需要比较熟练的使用解析XML的一些API,比如JDOM,SAX等,因为在我们一般的项目中,XML往往担当系统配置 信息的作用,您需要用这些API解析这些配置信息,开发完美的项目。
四、 精通使用一种或两种框架。像在《如何成为java初级程序员》中提到的那样,“框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开 发使你可以省出很多的开发成本”。但我这里希望您能精通,更多的是希望您能通过框架的使用了解框架的思想。这样您在开发一个项目时思路会开阔一些,比如您 会想到把SQL语句与您的JAVA代码分开,再比如您会考虑把您的业务逻辑配置到XML或者数据库中,这样整个项目就很容易扩张了。
五、 熟悉主流数据库。其实真正比较大的项目都是有人专门做数据库的,但往往很多项目要求作为(高级)工程师的您也参与数据库的设计以及SQL的编写。所以为了 更好的为国家做贡献,建议您还是多了解一些主流数据库,比如SQLSERVER,ORACLE,多连接SQL和存储过程以及触发器。如果您不是“科班”出 身,您还需要补充一些数据库原理方面的知识。
六、 精通一种或两种WEBServer。尽管我再《如何成为java初级程序员》里讲过它,我还是要强调您要精通一种或两种。因为作为JAVA工程师,特别时 想成为高级JAVA工程师的您,您不可避免地要部署您的项目到WebServer上,而且只有当您精通一种WebServer,您才可能最大限度地使用它 的资源,这往往可以节省很多时间和精力。
七、 UML。我知道您肯定想成为高级工程师,因此您有必要了解或熟练或精通UML,这取决于您有多大决心想成为高级工程师和项目经理。在比较正规的开发团队 中,UML是讨论项目的交流工具,您要想做一个软件工程师,您至少要能看懂,您要想做高级工程师,您要能通过它来描述您对项目的理解,尽管这不是必须,但 却很重要。
八、 站在高度分析问题:这不是一个知识点,也不是通过书本就能学得到的。只所以提到这一点,是因为我比您还着急,我希望您更快的成为一个高级的软件工程师,而 不是一个一般的软件工程师。希望您在工作中多向您的系统分析员、需求分析员、系统设计员学习,多站在他们角度上去看您在开发的项目。在最好在项目之初先在 您的脑海里对项目有个大致的分析、设计,然后和他们进行比较,找找差别,想想缺点。
九、 工具。与在《如何成为java初级程序员》里提到的不同,您在这个阶段可能接触到不同的工具了,尽管您还需要使用JB或者IDEA,但能可能对 ROSE,Together要多了解一些,因为您要画UML了。不要再对Dreamweaver等HTML编辑器情有独钟了,那些JSP页面让初级程序员 去写吧
微观方面
1.Core Java部分
这是最基础的,对于一个java高级开发/设计人员,你需要对这一部分达到精通的水平,重点内容如下:
a.面向对象编程思想(封装继承多态接口)
b.字符串处理
c.java.lang包,java.util包等常用包
d.java异常处理
2.Java高级部分
a.Java I/O流
b.Java多线程技术
c.Java网络编程
d.Java Swing
后两项可以了解即可,如果项目需要可以深入研究
3.前端基本技能
* HTML + CSS网页开发
* JavaScript
* Jquery
* 浏览器兼容性 CSS hack(了解)
4.熟练使用JSP + Servlet进行开发
5.MVC设计模式,原理,以及相关框架,如Struts
6.SSH框架
7.缓存技术 session & cookie
8.熟练使用一种以上Java开发工具(Eclipse/MyEclipse/Jbuilder/Jcreator/IntelliJIEDA/NetBeans)
9.熟练使用XML
JDOM w3c.dom SAX
10.Java设计模式
工厂模式,单例模式 ==
11.Java反射机制
反射的各种用法
12.了解或熟悉 C, C++, .NET
13.熟悉JDK的配置,环境变量
14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==)
oracle:视图,索引,存储过程,触发器,游标,包,常用函数 ==
15.数据库原理
事务的原理,锁机制,表连接,复杂查询语句(工作经验),性能调优,锁表以及解决方案==
16.JDBC,连接池
17.Ajax,反向Ajax
18.HTTP协议,request 和 response的原理,HTTP status(了解常用的),Https原理
19.熟悉Linux基本命令,使用过Linux/Unix系统,可以编写shell脚本,可以在Linux上部署项目
20.了解windows系统批处理脚本bat
21.了解HTML5,最好学习过
22.熟悉一种JS框架,如Prototype
23.J2EE原理 熟悉一种以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉一门脚本语言,如python ,ruby
26.了解php/ asp
27.了解ftp协议及原理
28.熟练使用Junit测试,熟悉Mockito等测试工具
29,熟悉javac,javadoc,native,native2ascii等常用命令
30.熟悉常用的排序算法,如冒泡排序,快速排序等,最好自己研究过一些的算法。
31.了解Flex(不学也没关系)
32.了解敏捷开发模式
33.工作流workflow至少用过一种,如OSworkflow,了解原理
34.使用过VPN了解其原理
35.熟悉jstl表达式和el表达式
36.熟悉webservice,WSDL,SOAP
37.图片处理,如图片上传,预览,限制大小等
38.版本控制工具,CVS VSS SVN
39,JSON技术,JSON+AJAX
40.分页技术,最好自己实现过不仅仅是用过要知道原理
41.Java Mail
42.Java读写txt,excel,JXL技术
43.JVM原理,JVM内存管理,GC,Java堆栈池
44.熟练使用下面的工具:
office办公软件,word,excel,ppt等
plsql,sqldevelop 数据库开发工具
outlook大公司都用
ue编辑器
浏览器控制台,调试
SHH/PUTTY 远程
45.UML建模工具Rational Rose等
- 使用log4j
47.使用过开放Api如百度,腾讯街景,新浪微博等
48.页面静态化技术(伪静态页面)
49.报表技术,使用过报表制作工具,如水晶易表。
50.定时任务,如Spring batch ,学会自定义batch任务(不适用第三方工具)
51.了解uuid
52.b/s 和 c/s架构
53.正则表达式
54.了解jndi jms
55.ERP
56.UNICODE编码,乱码解决
57.开源网络编辑器,如ckEditor
58.二进制原理
59.使用过,了解过开源论坛框架,如discuzz
60.GWT,Closure框架
61.了解大数据,云计算
62.搜索引擎搜索技术
63.软件工程,项目管理
网友评论