- 1.java中++和--的前缀和后缀有什么区别?
- 2.java的基本数据类型有哪些,分别占多少内存?
- 3.java中有哪些循环,有什么区别?
- 4.&&和&,||和|有什么区别
- 5.讲一讲Lambda表达式是什么?有什么应用?
- 6.对集合的stream有了解吗?讲讲有哪些用法?
- 7.抽象类和接口的区别?
- 8.讲一下对面向对象的了解?
- 9.介绍一下Java的集合
- 10.JDK 和 JRE 有什么区别?
- 11.== 和 equals 的区别是什么?
- 12.java中操作字符串都有哪些类,它们之间有什么区别?
- 13.String 类的常用方法都有那些?
- 14.java 中 IO 流分为几种?
- 15.Collection 和 Collections 有什么区别?
- 16.HashMap 和 Hashtable 有什么区别?
- 17.ArrayList 和 LinkedList 的区别是什么?
- 18.ArrayList 和 Vector 的区别是什么?
- 19.ArrayList的扩容机制
- 20.hashmap 是怎么扩容的,为什么是2的幂?
- 21.什么是反射?
- 22.什么是 java 序列化?什么情况下需要序列化?
- 23.为什么要使用克隆?如何实现对象克隆?
- 24.深拷贝和浅拷贝区别是什么?
- 25.重写和重载的区别
++在前表示先自增后运算,++在后表示先运算后自增
2.java的基本数据类型有哪些,分别占多少内存?byte 1字节 short 2字节 int 4字节 long 8字节
float 4字节 double 8字节 boolen(本身4字节)运算时2字节 char 1字节
for 循环 :循环次数已知时使用;
while循环:循环次数未知时使用;
dowhile循环 每次都会执行一次do里面的内容
短路与&& 左边为fasle右边不会执行 逻辑与& 左边为fasle 右边仍执行
短路或|| 左边为ture 右边不执行 ;逻辑或| 左边为true 右边还会执行
lambda表达式是JAVA8中提供的一种新的特性,它可以简化匿名内部类的写法 应用:函数式接口
6.对集合的stream有了解吗?讲讲有哪些用法?stream流是对集合的一系列操作过程 用法:遍历foreach ;过滤filter ;一个流中的元素映射到另一个流中 map;取前几个limit ; sort排序
7.抽象类和接口的区别?接口使用interface关键字 抽象类使用abstract
接口中没有构造方法
接口中的抽象方法只能是public,抽象类可以是其他的
接口可以多实现,抽象类只能单继承
接口中没有普通方法
面对对象是一种编程思想,一切皆为对象,贴近人的思维,便于大型项目的设计和管理。
1.封装,装,将属性和方法装到类中统一管理;封,信息隐藏,属性的私有化,提供get/set对其访问,提高数据安全性;
2.继承,子类继承父类的属性和方法,作用有:提高代码复用性、维护性,应用:设计系统时,多个类出现重复的属性和方法,考虑定义父类中;
3.多态,对于同一个方法根据对象类型的不同进行不同实现,提高程序灵活性,编写更通用的代码;基于封装、继承,将父类引用指向子类对象;实现:1.子类继承父类 2.子类重写父类方法 3.子类对象赋值给父类引用。应用:将方法的参数定义为父类的类型,运行时传入子类的对象
list:有序可重复的集合
set无序不可重复
map 键值对形式 键唯一 值不唯一
jdk是java开发环境
jre是java运行环境
jvm是java虚拟机
jdk>jre>jvm
==如果比的是基本数据类型则比的是值,如果比的是引用数据类型则比的是地址。
equals默认比的是地址,String重写了equals方法则比的是值。
string 字符串常量
stringbuffer:线程安全的 字符串变量
stringbuild:线程不安全的 效率高 字符串变量
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
equals(): 比较两个字符串是否相等
输入流跟输出流
字节流跟字符流 字节流是以字节为单位传输的(8位传输) 字符流是以字符为单位传输的(16位传输)
集合分为单列集合和双列集合,Collection是单例集合的接口,底下有list跟set集合。
Collections是集合操作的工具类,包括二分查找、反转、排序等
hashtable 不允许Nul值跟null键 线程安全 效率非常低
HashMap 允许Nul值跟null键 线程不安全 效率高
ArrayList 底层是数组 是有序可重复的 查询快 增删慢
LinkedList 底层是双向链表 是无序不可重复的 查询慢 增删快
ArrayList 是线程不安全的 效率高一点
Vector 是线程安全的 效率低
ArrayList 默认扩容是1.5倍 Vector 是两倍
ArrayList扩容的本质就是计算出新的扩容数组的size后实例化,并将原有的数组内容复制到新数组中,新的容量默认会是原容量的1.5倍
20.hashmap 是怎么扩容的,为什么是2的幂?hashmap有加载因子 默认是0.75,添加数量达到整个长度的加载因子就发生扩容。
当长度是2的次幂时 计算下标时 hash值按位与(长度-1)的位上是1 可以避免出现相同的值 减少hash碰撞
反射就是可以动态的调用对象的方法跟属性
22.什么是 java 序列化?什么情况下需要序列化?java 序列化就是将对象转化为二进制流保存在内存或硬盘中
当对象需要被保存在硬盘或需要进行网络传输的时候
相对一个对象进行处理 又想保留原有的数据就需要使用克隆
实现Cloneable接口并重写Object类中的clone方法
实现Serializable接口,通过对象的反序列化实现克隆
浅拷贝和深拷贝对于基本数据类型都是值传递
浅拷贝对于引用数据类型还是指向原有数据的地址
深拷贝是重新创建一个新的对象并复制其内容
重载是发生在本类中,重写是发生在父子关系中;
重载要求方法名相同,参数列表不同,重写要求方法名相同,参数列表相同,返回值相同或返回值同类型的子类,权限修饰符不能比父类更严格;
重写用@override修饰
== 爛以上是本人整理的一些java面试基础篇的题目,如有错误欢迎指正~ ==



