很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。针对这些的同学,总结了一份互联网公司Java高面试专题,进行了解析整理,免费分享给大家,给大家指一指方向,希望大家能带着这些问题,找相关资料进行有针对性行的学习,对面试做到知己知彼,百战百胜。如果大家觉得有用的,可以进行收藏,文末有彩蛋。
一, 设计模式(23道)
单例模式(Singleton Pattern )
定义:Ensure a class has only one instance, and provide a global point of access
to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实
例。)
通用代码:(是线程安全的)
public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量是 static public static void doSomething(){ } }
使用场景:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数
器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确
保是线程安全的;
● 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式
(当然,也可以直接声明为 static 的方式)。
线程不安全实例:
public class Singleton { private static Singleton singleton = null; //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ if(singleton == null){ singleton = new Singleton(); } return singleton; } }
解决办法:
在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增
加 synchronized 来实现。
- 工厂模式
- 抽象工厂模式(Abstract Factory Pattern)
- 模板方法模式(Template MethodPattern )
- 建造者模式(Builder Pattern)
- 代理模式(Proxy Pattern )
- 原型模式(Prototype Pattern )
- 中介者模式
- 命令模式
- 责任链模式
- 装饰模式(Decorator Pattern)
- 策略模式(Strategy Pattern)
- 适配器模式(Adapter Pattern)
- 迭代器模式(Iterator Pattern )
- 组合模式((Composite Pattern) )
- 观察者模式(Observer Pattern )
- 门面模式(Facade Pattern)
- 备忘录模式(Memento Pattern )
- 访问者模式(Visitor Pattern )
- 状态模式(复杂)
- 解释器模式(Interpreter Pattern )(少用)
- 享元模式(Flyweight Pattern)
- 桥梁模式(Bridge Pattern )
Dubbo (28道)
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
dubbo : 单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用,
以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;
rmi : 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现
Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数
据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。
多个短连接,TCP 协议传输,同步传输,适用常规的远程服务调用和 rmi 互
操作。在依赖低版本的 Common-Collections 包,java 序列化存在安全漏
洞;
webservice : 基于 WebService 的远程调用协议,集成 CXF 实现,提供和
原生 WebService 的互操作。多个短连接,基于 HTTP 传输,同步传输,适
用系统集成和跨语言调用;
http : 基于 Http 表单提交的远程调用协议,使用 Spring 的 HttpInvoke 实
现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消
费者,需要给应用程序和浏览器 JS 调用;
hessian : 集成 Hessian 服务,基于 HTTP 通讯,采用 Servlet 暴露服务,
Dubbo 内嵌 Jetty 作为服务器时默认实现,提供与 Hession 服务互操作。多
个短连接,同步 HTTP 传输,Hessian 序列化,传入参数较大,提供者大于
消费者,提供者压力较大,可传文件;
memcache : 基于 memcached 实现的 RPC 协议
redis : 基于 redis 实现的 RPC 协议
- Dubbo 超时时间怎样设置?
- Dubbo 有些哪些注册中心?
- Dubbo 集群的负载均衡有哪些策略
- Dubbo 是什么?
- Dubbo 的主要应用场景?
- Dubbo 的核心功能?
- Dubbo 服务注册与发现的流程?
- Dubbo 的架构设计?
- Dubbo 框架设计一共划分了 10 个层:
- Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
- dubbo 推荐用什么协议?
- Dubbo 有些哪些注册中心?
- Dubbo 默认采用注册中心?
- 为什么需要服务治理?
- Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?
- Dubbo 与 Spring 的关系?
- Dubbo 使用的是什么通信框架?
- Dubbo 集群提供了哪些负载均衡策略?
- Dubbo 的集群容错方案有哪些?
- Dubbo 的默认集群容错方案?
- Dubbo 支持哪些序列化方式?
- Dubbo 超时时间怎样设置?
- 服务调用超时问题怎么解决?
- Dubbo 在安全机制方面是如何解决?
- Dubbo 和 Dubbox 之间的区别?
- Dubbo 和 Spring Cloud 的关系?
- Dubbo 和 Spring Cloud 的区别?
JVM和性能优化(17道)
JVM 内存区域划分
- 程序计数器( 线程私有 )
- Java 栈( 线程私有 )
- 本地方法栈( 线程私有 )
- 堆( 线程共享 )
- 方法区( 线程共享 )
- 直接内存( 线程共享 )
JVM内存整理及GC回收
- Java 中是值传递还是引用传递?
- 引用类型
- 基本垃圾回收算法
- 分代处理垃圾
- JAVA 中垃圾回收 GC 的类型
JVM内存区域划分.
- 程序计数器( 线程私有 )
- Java 栈( 线程私有 )
- 本地方法栈( 线程私有 )
- 堆( 线程共享 )
- 方法区( 线程共享 )
- 直接内存( 线程共享 )
MySQL性能优化(21题)
- 为查询缓存优化你的查询
- EXPLAIN 你的 SELECT 查询
- 当只要一行数据时使用 LIMIT 1 1
- 为搜索字段建索引
- 在 在 n Join 表的时候使用相当类型的例,并将其索引
- 千万不要 ORDER BY RAND()
- 避免 SELECT * *
- 永远为每张表设置一个 ID
- 使用 ENUM 而不是 VARCHAR
- 从 PROCEDURE ANALYSE() 取得建议
- 尽可能的使用 NOT NULL
- Prepared Statements
- 无缓冲的查询
- 把 P IP 地址存成 UNSIGNED INT
- 固定长度的表会更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 语句
- 越小的列会越快
- 选择正确的存储引擎
- 使用一个对象关系映射器 (Object Relational Mapper)
- 小心 “ 永久链接 ”
MyBatis面试专题(17题)
- 什么是 MyBatis?
- 讲下 MyBatis 的缓存
- Mybatis 是如何进行分页的?分页插件的原理是什么?
- 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
- Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
- #{}和${}的区别是什么?
- 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
- Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
- MyBatis 与 Hibernate 有哪些不同?
- MyBatis 的好处是什么?
- 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
- 什么是 MyBatis 的接口绑定,有什么好处?
- 接口绑定有几种实现方式,分别是怎么实现的?
- 什么情况下用注解绑定,什么情况下用 xml 绑定?
- MyBatis 实现一对一有几种方式?具体怎么操作的?
- Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区
- 别?
spring面试专题(22题)
- 什么是 SpringMvc?
- Spring MVC 的优点:
- SpringMVC 工作原理?
- SpringMVC 流程?
- SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
- 如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
- SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?
- @RequestMapping 注解用在类上面有什么作用?
- 怎么样把某个请求映射到特定的方法上面?
- 如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
- 怎么样在方法里面得到 Request,或者 Session?
- 我想在拦截的方法里面得到从前台传入的参数,怎么得到?
- 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象
- SpringMvc 中函数的返回值是什么?
- SpringMVC 怎么样设定重定向和转发的?
- SpringMvc 用什么对象从后台向前台传递数据的?
- SpringMvc 中有个类把视图和数据都合并的一起的,叫什么?
- 怎么样把 ModelMap 里面的数据放入 Session 里面?
- SpringMvc 怎么和 AJAX 相互调用的?
- 当一个方法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
- SpringMvc 里面拦截器是怎么写的
- 讲下 SpringMvc 的执行流程
一部分的面试整体题目就分享到这里了,由于文章长度的原因,大部分都只给大家展示了题目,但是中所有题目的答案都给打家准备在文档中了,相信金九银十有很多程序员朋友都是要面对面试官的敲打的,希望我整理的这些大厂的面试题,能够给让你的面试变得跟加的顺利。
需要的朋友关注小编添加VX【MXM9809】即可获取免费资料
部分资料图片: