知识点总结

2.5 HashMap 和 HashTable 有什么区别?
HasHMap是线程不安全的,HashTable是线程安全的
因为线程安全的问题,HashMap 效率比 HashTable 的要高。
HashMap是允许null键和null值,HashMap不允许

2.6HashMap,HashTable,ConcurrentHashMap 之间的区别, 及性能对比

1、HashMap 是非线程安全的,HashTable 是线程安全的。 

2、HashMap 的键和值都允许有 null 值存在,而 HashTable 则不行。
3、因为线程安全的问题,HashMap 效率比 HashTable 的要高。
4、Hashtable 是同步的,而 HashMap 不是。

3.1 什么是线程?线程和进程的区别?
线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的可以独立运 行的基本单位。
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资 源分配和调度的一个独 立单位。
特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存 单元相互独立,线程之间 内存共享,这使多线程编程可以拥有更好的性能和用户体验 注意:多线程编程对于其它程序是不友好的,占据大量 cpu 资源。

3.2 创建线程有几种方式
1.继承 Thread 类
2. 实现 Runnable 接口
3. 实现 Callable 接口
4. 通过线程池方法

  1. 什么是线程池,如何使用?
    线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用 new 线程而是直接 去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率。
  2. 常用的线程池有哪些?
    创建一个单线程的线程池,创建固定大小的线程池,创建一个可缓存的线程池,创建一个大小无限的线程池,创建一个单线程的线程池。
    3.2 线程的基本方法有什么?
    线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。
    线程等待(wait)会释放对象的锁
    线程睡眠(sleep)sleep 不会释放当前占有的 锁
    .线程让步(yield)让出 CPU 执行时间片
    线程中断(interrupt)给这个线程一个通知信号,会影响这个线程内部的一个中断 标识位
    等待其他线程终止.(Join) 等待其他线程终止
    线程唤醒(notify)唤醒在此对象监视器上等待的单个线程
    3.3 在 java 中 wait 和 sleep 方法的不同?
    最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。wait 通常被用于线程 间交互,sleep 通常被用于暂停执行。

3.4 同步锁与死锁
同步锁:保证线程同步互斥,就是指并发执行的多个线程
死锁:就是多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放

3.5乐观锁和悲观锁是什么?
乐观锁:以为会排队不上锁
悲观锁:每次拿数据的时候都会上锁

3.6 线程池原理

  1. 线程池管理器:用于创建并管理线程池
  2. 工作线程:线程池中的线程
  3. 任务接口:每个任务必须实现的接口,用于工作线程调度其运行
  4. 任务队列:用于存放待处理的任务,提供一种缓冲机制

3.7 线程执行的顺序

  1. 当线程数小于核心线程数时,会一直创建线程直到线程数等于核心线程数;
  2. 当线程数等于核心线程数时,新加入的任务会被放到任务队列等待执行;
  3. 当任务队列已满,又有新的任务时,会创建线程直到线程数量等于最大线程数;
  4. 当线程数等于最大线程数,且任务队列已满时,新加入任务会被拒绝

3.8 线程池的核心参数有哪些?
1.corePoolSize(核心线程数)
2.queueCapacity(任务队列容量)
3.maxPoolSize(最大线程数)
4.keepAliveTime(线程空闲时间)

4.1 JVM 内存管理
JVM 将内存划分为 6 个部分:PC 寄存器(也叫程序计数器).虚拟机栈.堆. 方法区.运行时常量池.本地方法栈

4.2 GC 分代收集算法和分区收集算法区别?

  1. 分代收集算法:会根据算法的生命周期不同划分(新生代,老生代,永久代)
  2. 分区收集算法:将整个堆空间划分为连续不同的小区间

4.3 GC 垃圾收集器
Java堆内存被划分新生代和老生代,新生代主要使用复制和标记-清理垃圾回收算法,
老年代主要使用标记-整理垃圾回收算法,因此java虚拟机的针对新生代和老年代提供了
多种不同的垃圾收集器

4.4 JVM 调优工具
Jconsole,jProfile,VisualVM
Jconsole:jdk自带,功能简单,但是可以在系统有一定夫荷的情况下。对垃圾回收算法有很详情的跟踪。
Jprofiler:商业软件,需要付费。功能强大。
Visualvm:jdk自带,功能强大 与jprofiler类似

4.5 如何调优
性能调优是lT运维工作中的重点之一
线程池:解决用户响应时间长的问题
连接池 JVM 启动参数:调整各代的内存比例和垃圾回收算法,提高吞吐量
程序算法:改进程序逻辑算法提高性能
4.6 内存泄漏检查
内存泄露是比较常见的问题,系统资源(各方面资源,栈,堆,线程等)在错误使用的情况下,导致使用完毕资源无法回收,导致新的资源分配请求无法完成,引起系统错误。
内存泄漏对系统危害比较大,因为他可以直接导致系统崩溃。

年老代堆空间被占满
异常: java.lang.OutOfMemoryError: Java heap space
这是最典型的内存泄露方式,简单说就是所有堆空间都被无法回收的垃圾对象占满,虚拟机无法再分配新空间
解决:根据垃圾回收前后情况对比,同时根据对象引用情况分析,基本都可以找到泄露点

持久代被占满
异常:java.lang.OutOfMemoryError: PermGen space
Perm 空间被占满。无法为新的 class 分配存储空间而引发的异常
解决: 1. -XX:MaxPermSize=16m 2. 换用 JDK。比如 JRocket。

堆栈溢出
异常:java.lang.StackOverflowError
说明:这个就不多说了,一般就是递归没返回,或者循环调用造成

线程堆栈满
异常:Fatal: Stack size too small
java 中一个线程的空间大小是有限制的。JDK5.0 以后这个值是 1M。 与这个线程相关的数据将会保存在其中。但是当线程空间满了以后,将会出现上 面异常。
解决:增加线程栈大小。-Xss2m。但这个配置无法解决根本问题,还要看代 码部分是否有造成泄漏的部分。

系统内存被占满
异常:java.lang.OutOfMemoryError: unable to create new native thread
这个异常是由于操作系统没有足够的资源来产生这个线程造成的。
解决: 1. 重新设计系统减少线程数量。
2. 线程数量不能减少的情况下,通过-Xss 减小单个线程大小。以便能生产 更多的线程。

说下原生 jdbc 操作数据库流程?
第一步:Class.forName()加载数据库连接驱动; 第二步:DriverManager.getConnection()获取数据连接对象; 第三步:根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、 PreparedStatement ; 第四步:执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX(); 第五步:关闭结果集、关闭会话、关闭连接。

1.2 说说事务的概念,在 JDBC 编程中处理事务的步骤。
1 事务是作为单个逻辑工作单元执行的一系列操作。
2,一个逻辑工作单元必须有四个属性,称为原子性、 一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为 一个事务事务处理步骤:
3,conn.setAutoComit(false);设置提交方式为手工提交
4,conn.commit()提交事务
5,出现异常,回滚 conn.rollback();

TCP 与 UDP 区别?
UDP: a、是面向无连接, 将数据及源的封装成数据包中,不需要建立建立连接
b、每个数据报的大小在限制 64k 内
c、因无连接,是不可靠协议
d、不需要建立连接,速度快
TCP: a、建议连接,形成传输数据的通道.
b、在连接中进行大数据量传输,以字节流方式
C、通过三次握手完成连接,是可靠协议
d、必须建立连接
m 效率会稍低 聊天、网络视频会议、桌面共享用的就是 UDP

说一下什么是 Http 协议?
客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。 是一个基于请求与响应模式的、无状态的、应用层的协议,基于 TCP 的连接方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值