很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。针对这些的同学,总结了一份互联网公司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 来实现。

  1. 工厂模式
  2. 抽象工厂模式(Abstract Factory Pattern)
  3. 模板方法模式(Template MethodPattern )
  4. 建造者模式(Builder Pattern)
  5. 代理模式(Proxy Pattern )
  6. 原型模式(Prototype Pattern )
  7. 中介者模式
  8. 命令模式
  9. 责任链模式
  10. 装饰模式(Decorator Pattern)
  11. 策略模式(Strategy Pattern)
  12. 适配器模式(Adapter Pattern)
  13. 迭代器模式(Iterator Pattern )
  14. 组合模式((Composite Pattern) )
  15. 观察者模式(Observer Pattern )
  16. 门面模式(Facade Pattern)
  17. 备忘录模式(Memento Pattern )
  18. 访问者模式(Visitor Pattern )
  19. 状态模式(复杂)
  20. 解释器模式(Interpreter Pattern )(少用)
  21. 享元模式(Flyweight Pattern)
  22. 桥梁模式(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 协议

  1. Dubbo 超时时间怎样设置?
  2. Dubbo 有些哪些注册中心?
  3. Dubbo 集群的负载均衡有哪些策略
  4. Dubbo 是什么?
  5. Dubbo 的主要应用场景?
  6. Dubbo 的核心功能?
  7. Dubbo 服务注册与发现的流程?
  8. Dubbo 的架构设计?
  9. Dubbo 框架设计一共划分了 10 个层:
  10. Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
  11. dubbo 推荐用什么协议?
  12. Dubbo 有些哪些注册中心?
  13. Dubbo 默认采用注册中心?
  14. 为什么需要服务治理?
  15. Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?
  16. Dubbo 与 Spring 的关系?
  17. Dubbo 使用的是什么通信框架?
  18. Dubbo 集群提供了哪些负载均衡策略?
  19. Dubbo 的集群容错方案有哪些?
  20. Dubbo 的默认集群容错方案?
  21. Dubbo 支持哪些序列化方式?
  22. Dubbo 超时时间怎样设置?
  23. 服务调用超时问题怎么解决?
  24. Dubbo 在安全机制方面是如何解决?
  25. Dubbo 和 Dubbox 之间的区别?
  26. Dubbo 和 Spring Cloud 的关系?
  27. Dubbo 和 Spring Cloud 的区别?

JVM和性能优化(17道)

JVM 内存区域划分

  1. 程序计数器( 线程私有 )
  2. Java 栈( 线程私有 )
  3. 本地方法栈( 线程私有 )
  4. 堆( 线程共享 )
  5. 方法区( 线程共享 )
  6. 直接内存( 线程共享 )

JVM内存整理及GC回收

  1. Java 中是值传递还是引用传递?
  2. 引用类型
  3. 基本垃圾回收算法
  4. 分代处理垃圾
  5. JAVA 中垃圾回收 GC 的类型

JVM内存区域划分.

  1. 程序计数器( 线程私有 )
  2. Java 栈( 线程私有 )
  3. 本地方法栈( 线程私有 )
  4. 堆( 线程共享 )
  5. 方法区( 线程共享 )
  6. 直接内存( 线程共享 )

MySQL性能优化(21题)

  1. 为查询缓存优化你的查询
  2. EXPLAIN 你的 SELECT 查询
  3. 当只要一行数据时使用 LIMIT 1 1
  4. 为搜索字段建索引
  5. 在 在 n Join 表的时候使用相当类型的例,并将其索引
  6. 千万不要 ORDER BY RAND()
  7. 避免 SELECT * *
  8. 永远为每张表设置一个 ID
  9. 使用 ENUM 而不是 VARCHAR
  10. 从 PROCEDURE ANALYSE() 取得建议
  11. 尽可能的使用 NOT NULL
  12. Prepared Statements
  13. 无缓冲的查询
  14. 把 P IP 地址存成 UNSIGNED INT
  15. 固定长度的表会更快
  16. 垂直分割
  17. 拆分大的 DELETE 或 INSERT 语句
  18. 越小的列会越快
  19. 选择正确的存储引擎
  20. 使用一个对象关系映射器 (Object Relational Mapper)
  21. 小心 “ 永久链接 ”

MyBatis面试专题(17题)

  1. 什么是 MyBatis?
  2. 讲下 MyBatis 的缓存
  3. Mybatis 是如何进行分页的?分页插件的原理是什么?
  4. 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
  5. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
  6. #{}和${}的区别是什么?
  7. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  8. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  9. MyBatis 与 Hibernate 有哪些不同?
  10. MyBatis 的好处是什么?
  11. 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
  12. 什么是 MyBatis 的接口绑定,有什么好处?
  13. 接口绑定有几种实现方式,分别是怎么实现的?
  14. 什么情况下用注解绑定,什么情况下用 xml 绑定?
  15. MyBatis 实现一对一有几种方式?具体怎么操作的?
  16. Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区
  17. 别?

spring面试专题(22题)

  1. 什么是 SpringMvc?
  2. Spring MVC 的优点:
  3. SpringMVC 工作原理?
  4. SpringMVC 流程?
  5. SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
  6. 如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
  7. SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?
  8. @RequestMapping 注解用在类上面有什么作用?
  9. 怎么样把某个请求映射到特定的方法上面?
  10. 如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
  11. 怎么样在方法里面得到 Request,或者 Session?
  12. 我想在拦截的方法里面得到从前台传入的参数,怎么得到?
  13. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象
  14. SpringMvc 中函数的返回值是什么?
  15. SpringMVC 怎么样设定重定向和转发的?
  16. SpringMvc 用什么对象从后台向前台传递数据的?
  17. SpringMvc 中有个类把视图和数据都合并的一起的,叫什么?
  18. 怎么样把 ModelMap 里面的数据放入 Session 里面?
  19. SpringMvc 怎么和 AJAX 相互调用的?
  20. 当一个方法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
  21. SpringMvc 里面拦截器是怎么写的
  22. 讲下 SpringMvc 的执行流程

一部分的面试整体题目就分享到这里了,由于文章长度的原因,大部分都只给大家展示了题目,但是中所有题目的答案都给打家准备在文档中了,相信金九银十有很多程序员朋友都是要面对面试官的敲打的,希望我整理的这些大厂的面试题,能够给让你的面试变得跟加的顺利。

需要的朋友关注小编添加VX【MXM9809】即可获取免费资料

 

部分资料图片: