一、Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) 3、与平台无关性(JVM是Java跨平台使用的根本) 4、可靠安全 5、支持多线程
二、java面试技巧(面试题整理:panbaiducom/s/18_A5f9EQPpyRJPbtSuhKNQ 提取码:1rc8) 很多 Java 工程师的技术不错,但是一面试就头疼,10 次面试 9 次都是被刷,过的那次还是去了家不知名的小公司。问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。 应届生:你该如何准备简历,面试项目和面试说辞?Spring 底层逻辑是什么? 1-3 年经验的程序员:面试中你该讲哪些值钱的技术?如何用这些值钱的技术最大程度展示自己的技能?分布式组件底层逻辑是什么? 3-5 年经验的程序员:k8s 怎么搭建实践? 这些问题,相信每一位 Java 程序员都曾遇到过,甚至有的人至今也不知道要怎么解决,屡面屡败,最终导致你的面试通过率极低。 如果说简历是你求职的敲门砖,那么你回答每一个 Java 技术问题的技巧与方法,就是你面试能否通过的关键! 为了帮助各位工程师,掌握 Java 面试中每一个问题的技巧,提高面试通过率,在这分享一些大厂面试都问的高频常问面试题,这份面试题资料包括了 Spring,JVM,java 基础,Java 集合,Java 并发编程,微服务,网络,Kafka,分布式,Redis,大厂面试解决方案,分布式事务,设计模式,算法,数据结构,MySQL 等
三、java面试题整理(包含答案) 1、String 和 StringBuffer 的区别 ? 【基础】 答: JAVA 平台提供了两个类: String 和 StringBuffer ,它们可以储存和操作字符串,即包含多个字符 的字符数据。这个 String 类提供了数值不可改变的字符串。而这个 StringBuffer 类提供的字符串进行修改。 当你知道字符数据要改变的时候你就可以使用 StringBuffer 。典型地,你可以使用 StringBuffers 来动态构造 字符数据。
2、 String, StringBuffer StringBuilder 的区别。【基础】 答: String 的长度是不可变的; StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用 StringBuffer ,如果最后需要 String ,那么使用 StringBuffer 的 toString() 方法;线程安全; StringBuilder 是从 JDK 5 开始,为StringBuffer 该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
3、 abstract class 和 interface 有什么区别 ? 【基础】 答:声明方法的存在而不去实现它的类被叫做抽象类( abstract class ),。然而可以创建一个变量,其类型是一个抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。 Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口( interface )是抽象类的变体。新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是 publicstaticfinal 的。一个类可以实现多个接口,当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换, instanceof 运算符可以用来决定某对象的类是否实现了接口。
4 、静态变量和实例变量的区别?【基础】 答:静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。
5、是否可以从一个 static 方法内部发出对非 static 方法的调用?【基础】 答:不可以 , 如果其中包含对象的 method() ,不能保证对象初始化。
6 、写 clone() 方法时,通常都有一行代码,是什么?【基础】 答: Clone 有缺省行为: super.clone() ,他负责产生正确大小的空间,并逐位复制。
7、 GC 是什么 ? 为什么要有 GC? 【基础】 答: GC 是垃圾收集的意思( Gabage Collection ) , 内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃, Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的, Java 语言没有提供释放已分配内存的显示操作方法。 Java 程序员不用 担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc()或 Runtime.getRuntime().gc() 。
8、Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式? Java 中,可以使用 SimpleDateFormat 类或者 joda-time 库来格式日期。DateFormat 类允许你使用多种流行的格式来格式化日期。参见答案中的示例代码,代码中演示了将日期格式化成不同的格式,如 dd-MM-yyyy 或 ddMMyyyy。
9、说出 5 条 IO 的最佳实践 IO 对 Java 应用的性能非常重要。理想情况下,你不应该在你应用的关键路径上避免 IO 操作。下面是一些你应该遵循的 Java IO 最佳实践: a)使用有缓冲区的 IO 类,而不要单独读取字节或字符。 b)使用 NIO 和 NIO2 c)在 finally 块中关闭流,或者使用 try-with-resource(Java7) 语句。 d)使用内存映射文件获取更快的 IO。
10、列出 5 个应该遵循的 JDBC 最佳实践 有很多的最佳实践,你可以根据你的喜好来例举。 下面是一些更通用的原则: a)使用批量的操作来插入和更新数据 b)使用 PreparedStatement 来避免 SQL 异常,并提高性能。 c)使用数据库连接池 d)通过列名来获取结果集,不要使用列的下标来获取。
11、ArrayList、Vector和LinkedList的区别及使用场景 ArrayList和Vector都是使用数组方式存储数据,允许按序号索引元素,但是插入数据会涉及到元素移动等内存操作,所以索引快插入慢。 ArrayList懒加载 默认大小10 每次扩容1.5倍 线程不安全 性能较高Vector 实例化时初始化 默认大小10 每次扩容2倍 线程安全 性能较低 已弃用。
12、Collection和Collections的区别 Collection是集合类上级接口,继承他的主要有List和Set Collections是集合类的帮助类,提供了对集合的搜索、排序、线程安全化等操作。
13、List和Map的区别 List是存储单列数据的集合,Map是存储键值对双列数据的集合。 List存储的数据是有顺序且可重复的,Map存储的数据是无顺序,键不可重复,值可重复的