本文共 4578 字,大约阅读时间需要 15 分钟。
Java中有几种基本数据类型?8种
讲一下java中int数据占几个字节基本数据类型: 4类8种 `在内存中存放的是数据值本身(所占内存大小固定) A:整数 占用字节数 byte 1 short 2 int 4 long 8 长整数值超过int型要加L或者l。 B:浮点型 float 4 double 8 单精度的浮点数超过float型要加F或者f。 C:字符 char 2 只能表示单字符(可以存储一个中文汉字:java语言中的字符占用两个字节)且必须使用单引号括起来 字符串常量是用""括起来的一串若干字符 D:布尔 boolean 1
Int占 4个字节,32位
Boolean 1位继承:(new dog) is (animal)一般类只能单继承,内部类实现多继承,接口可以多继承封装:访问权限控制public > protected > 包 > private 内部类也是一种封装多态:同一个对象在不同时刻体现出来的不同状态。 java多态,一个类可以实现多个接口! !抽象: 就是把现实生活中的对象,抽象为类。
包装类型:每一个基本的数据类型都会一一对应一个包装类型。
自动装箱和拆箱 Java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性。非常经典的一个面试题?先说清楚一个,再来说另一个?
A:== 基本类型:比较的是值是否相同 引用类型:比较的是地址值是否相同B:equals() 只能比较引用类型。默认情况下,比较的是地址值是否相同。 但是,我们可以根据自己的需要重写该方法。
equals 用来比较两个对象长得是否一样。判断两个对象的某些特征是否一样。实际上就是调用对象的equals方法进行比较。
1.在java中提供三个类String StringBuillder StringBuffer来表示和操作字符串。字符串就是多个字符的集合。
String是内容不可变的字符串。String底层使用了一个不可变的字符数组(final char[])2.最经典就是拼接字符串。
1、String进行拼接.String c = “a”+”b”; 2、StringBuilder或者StringBuffer StringBuilder sb = new StringBuilder(); sb.apend(“a”).apend(“b”)拼接字符串不能使用String进行拼接,要使用StringBuilder或者StringBuffer
3.StringBuilder是线程不安全的,效率较高.而StringBuffer是线程安全的,效率较低。
Java中的集合分为value,key–vale(Conllection Map)两种。
List是有序的,可以重复的。 Set是无序的,不可以重复的。根据equals和hashcode判断,也就是如果 一个对象要存储在Set中,必须重写equals和hashCode方法。
ArrayList底层使用时数组。LinkedList使用的是链表。
ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList使用在查询比较少而插入和删除比较多的情况。
数组容量是有限的,数据多次插入的,到达一定的数量就会进行扩容,也就是resize
扩容:创建一个新的Entry空数组,长度是原数组的2倍。ReHash:遍历原Entry数组,把所有的Entry重新Hash到新数组。
是因为长度扩大以后,Hash的规则也随之改变。Hash的公式---> index = HashCode(Key) & (Length - 1)
在java中,所有的对象都是继承于Object类。Ojbect类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的。
那里的 equals是比较两个对象的内存地址
HashMap是通过key的hashCode去寻找index的,那index一样就形成链表了,也就是说”杭歌“和”歌杭“的index都可能是2,在一个链表上的。
get的时候,他就是根据key去hash然后计算出index,找到了2,equals方法找到具体的”杭歌“和”歌杭“.建议一定要对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。相同点:HashMap和HasheTalbe都可以使用来存储key–value的数据。
区别:1、HashMap是可以把null作为key或者value的,而HashTable是不可以的。2、HashMap是线程不安全的,效率较高。而HashTalbe是线程安全的,效率较低。
HashTalbe直接在方法上锁,并发度很低
我想线程安全但是我又想效率高? ConcurrentHashMap并发更高通过把整个Map分为N个Segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。
锁升级
无锁-(判断)-升级①实现方式?(哪4种)
答:(1)是否有返回值(2)是否抛异常(3)落地方法不一样,一个是run,一个是call
FutureTask
③怎么区分线程?在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个线程打印的怎么办?
thread.setName(“设置一个线程名称”); 这是一种规范,在创建线程完成后,都需要设置名称。设计模式就是经过前人无数次的实践总结出的,设计过程中可以反复使用的、可以解决特定问题的设计方法。
单例(饱汉模式、饥汉模式) 1、构造方法私有化,让出了自己类中能创建外其他地方都不能创建 2、在自己的类中创建一个单实例(饱汉模式是一出来就创建创建单实例,而饥汉模式需要的时候才创建) 3、提供一个方法获取该实例对象**(创建时需要进行方法同步)** 工厂模式:Spring IOC就是使用了工厂模式. 对象的创建交给一个工厂去创建。 代理模式:Spring AOP就是使用的动态代理。()
int read(); //从输入流中读取单个字节数据(0~255),如到输入流末尾则返回-1读取文本文件的时候,用字符流,如果用字节流可能会出现只读了半个字的情况,出现乱码~
七种进程间通信(匿名管道、管道、信号、信号量、消息链表、共享内存、套接字)
分页和分段
CPU 调度算法(先来先服务、短作业优先、优先级调度、多级反馈队列调度)
转载地址:http://btxab.baihongyu.com/