• Java语言


    1. Difference between Thread.sleep and Object.wait

    Thread.sleep: 会让当前线程休眠进入阻塞状态并释放CPU,提供其他线程运行机会且不考虑优先级,但如果持有同步锁,不会释放

    Thread.yield:  类似sleep方法,但无法指定时间并只会提供相同优先级或更高优先级线程运行机会,不推荐使用

    Thread.join:   一种特殊的wait,当前运行线程调用另一线程的join方法,当前线程进入阻塞状态直到另一线程运行结束

    Object.wait:   必须放在循环体和同步代码块中,执行该方法的线程会释放线程锁

    2. ThreadLocal (线程局部变量)

    为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,为多线程环境下出现并发访问问题提供了一种隔离机制

    3. GC

    - Eden满了,触发Young GC。1.回收没用Object   2.把还被引用的对象移到Survivor 3. 把Survivor里引用次数较多的移到Old

    - Old满了,触发Full GC。Full GC很消耗内存,把Young和Old大部分对象回收掉,这时候用户线程会被Block

     - JVM堆的大小决定了GC的运行时间,如果JVM堆大小超过一定先对,那么GC的运行时间会很长

     - 通常情况下,JVM堆的大小应为物理内存的80%

     - jmap -heap PID :heap概要信息,GC使用算法

     - jstat -gcutil PID : 类加载,GC等次数

     - Full GC(System) 应该是调用System.gc()

    4. SpringBoot

    - Fat Jar   

    - Starter    自动配置

    - Actuator 自带监控

    5. fail-fast机制 | fail-safe机制

    - 针对迭代器而言。快速失败,当在迭代一个集合时,如果有另外一个线程在修改这个集合,就会抛出ConcurrentModification异常,java.util下都是快速失败;安全失败,在迭代时候会在集合二层做一个拷贝,所有在修改集合上层元素不会影响下层,在java.util.concurrent下都是安全失败。

    6. mysql组合索引

    - 最左前缀: a_b_c的组合索引, 会同时创建a | a_b 的索引

    7. RPC框架的长连接

    - TCP的keep-alive机制是用来检测长时间不活跃的连接,但在真是的复杂网络环境下,不适合用来及时检测连接的状态,采用应用层的心跳包机制会更灵活可靠

    8. 线程状态 | notify&notifyAll 

    9. 线程池参数 | BlockingQueue | netty | io|nio

    10. LRU cache  

    11. JVM调试 

     - jdb 命令行调试工具

     - jps 列出所有Java进程的PID

     - jstack 列出虚拟机进程的所有线程运行状态

     - jmap 列出堆内存上的对象状态

     - jstat 记录虚拟机运行的状态,监控性能

     - jconsole 虚拟机性能/状态检查可视化工具

     load高排查步骤:

     1. top查找耗资源的进程

     2. ps + grep找到对应的java进程/线程

     3. jstack 分析哪些线程阻塞

     4. jstat FullGC频率

     5. jmap 查看是否有内存泄露

  • 相关阅读:
    做接口测试最重要的知识点
    HTTP和HTTPS区别
    UVA, 686 Goldbach's Conjecture (II)
    UVA, 543 Goldbach's Conjecture
    UVA, 580 Critical Mass
    UVA, 900 Brick Wall Patterns
    UVA, 11000 Bee
    UVA, 10079 Pizza Cutting
    C++ 向量<vector>的学习
    jenkins入门
  • 原文地址:https://www.cnblogs.com/hwu2014/p/7469639.html
Copyright © 2020-2023  润新知