2021-05-13

HASHMAP的数据结构是 哈希表=数组+链表

如果HashMap的key是自定义对象,那一定要重写HashCode和Equals方法

HashMap是线程不安全的,非同步的,效率快的。

HashTable是线程安全的,同步的,效率慢的。

2.TreeSet的元素是有序的不重复的  原理是 TreeSet的底层是二叉树

3.Jdk8版本之后哈希表引入了二叉树,从而达到查询的效率

4.Map集合的应用常营  比如说 统计商品出现次数

JVM

栈,堆,方法区

栈:方法运行时所进入的区域,里面还会有承运变量
堆:New出来的东西
方法区:字节码文件加载时所进入的内存

线程

每一个线程都会有自己独立的栈空间,堆内存的数据被多个线程所共享的

jvm中 堆内存和方法区是唯一的,栈内存可以有多个

重点:多线程消费同一个产品,可以将该商品定义为共享资源,存放在堆内存中

异常的处理方式

1.问题可以自己处理掉的

try_catch的处理方式:自己将问题处理掉,不会影响后续代码的继续执行


2.问题自己处理不掉的

throws抛出处理方式

创建线程的几种方式

1.继承Thread:java的类是单继承的,所以继承Thread类方式创建线程,该类无法继承其他类

2.实现Runable:java的类是单继承的,如果自己的类已经实现了别的类,将无法继承Thread类,所以这时候可以用实现Runable接口方式创建线程。

但是代码复杂

3.线程池方式:其实就是容器,易于管理,自动化装配,省去了频繁创建线程对象的操作

ExcuterService

Lock(同步锁)和Synchornize(同步代码块)的区别

   1.Lock是Synchornize扩展

   2.lock可以实现 公平锁,非公平锁 而且可以判断锁状态

   3.Synchornize只能实现非公平锁  无法判断锁状态

   4.买票案例:

   一个线程相当于一个窗口,多线程相当于多个窗口卖票,多个线程大大的提高效率

HashCode和Equals的区别

1.需要重写

String,StringBuilder,StringBuffer的区别

1.String是不可改变的字符序列,因为String没有Set方法,只要是赋值就是新对象,所以不可改变,String的内部是Final修饰的char数字

2.StringBuilder是可以改变成字符序列 

3.比如拼接Sql的话 如果内容多可以用StringBuilder效率高,而不用String拼接

4.StringBuffer是线程安全的,StringBuilder是线程不安全的

(因为StringBuffer字符串缓冲区安全的用于多个线程)

Sql的拼接的场景多,而且Dao层一般都是单线程的所以直接用StringBuilder就好了

Waite和Sleep的区别

1.waite方法在等待过程中,释放锁对象

2.sleep方法在休眠过程中,不会释放所对象

3.通过waite和notify我们可以实现线程之间的通讯

HashMap和HashTable

   hashMap是线程不同步的

   Hashtable是线程同步的但是用的不多

   HashTable的子类Propotirs大量使用中,通过Io流来加载配置文件

单例模式中饿汉式和懒汉式的区别

懒汉式类延时加载,使用是才创建对象(比如配置文件实现懒汉式)

饿汉式类加载时就完成了初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值