• Java高级


    HashMap简介
    HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
    HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。
    HashMap 的实现不是同步的,这意味着它不是线程安全的,但可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
    HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。初始容量默认是16。默认加载因子是 0.75, 这是在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本.
    HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,当链表长度太长(默认超过8)时,链表就转换为红黑树.

     

    jvm 原理 程序运行区域划分

    Java运行时数据区域?
    包括程序计数器、JVM栈、本地方法栈、方法区、堆
    方法区里存放什么?
    本地方法栈:和jvm栈所发挥的作用类似,区别是jvm栈为jvm执行java方法(字节码)服务,而本地方法栈为jvm使用的native方法服务。
    JVM栈:局部变量表、操作数栈、动态链接、方法出口。
    方法区:用于存储已被虚拟机加载的类信息,常量、静态变量、即时编译器编译后的代码等。
    堆:存放对象实例。

    Full GC触发条件:

    (1)调用System.gc时,系统建议执行Full GC,但是不必然执行

    (2)老年代空间不足

    (3)方法去空间不足

     

    concurrentMap 和 HashMap 区别

    1.hashMap可以有null的键,concurrentMap不可以有
    2.hashMap是线程不安全的,在多线程的时候需要Collections.synchronizedMap(hashMap),ConcurrentMap使用了重入锁保证线程安全。
    3.在删除元素时候,两者的算法不一样。
    ConcurrentHashMapHashtable主要区别就是围绕着锁的粒度以及如何锁,可以简单理解成把一个大的HashTable分解成多个,形成了锁分离。

    类加载机制是怎样的

    JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
    类加载的五个过程:加载、验证、准备、解析、初始化。

     

    分布式 CAP 了解吗?

    一致性(Consistency)
    可用性(Availability)
    分区容忍性(Partition tolerance)

    线程池用过吗?

    线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用。因为每启动一个新线程都会有相应的性能开销,每个线程都需要给栈分配一些内存等等。

    我们可以把并发执行的任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程。只要池里有空闲的线程,任务就会分配给一个线程执行。在线程池的内部,任务被插入一个阻塞队列(Blocking Queue ),线程池里的线程会去取这个队列里的任务。当一个新任务插入队列时,一个空闲线程就会成功的从队列中取出任务并且执行它。

    LinkedHashMap

    LinkedHashMap是通过哈希表和链表实现的,它通过维护一个链表来保证对哈希表迭代时的有序性,而这个有序是指键值对插入的顺序。

    RPC的详细过程

    RPC主要的重点有:
    动态代理,主要是invoke反射原理
    序列化,使用Thrift的效率高
    通信方式,使用NettyNIO能提高效率
    服务发现,使用zookeeper可以实现

     

    Eureka遵守AP  zookeeper

     

    ACID 原子性 一致性 独立性 持久性

    CAP 强一致性 可用性 分区容错

     

    Zookeeper保证CP

    Eureka则是AP

     

     

    HashMap和Hashtable的区别

    HashMap是非线程安全的,Hashtable是线程安全的。

    HashMap的键值都可以为null,Hashtable的键值都不可以为null值。

    HashMap继承自AbstractMap类,Hashtable继承自Dictionary类。

    ps : Properties类继承自Hashtable类。

    JVM虚拟机

    GC算法有哪些

    引用计数

    复制

    标记-清除

    标记-压缩

    分代(新生代、老年代、永久代)

    垃圾回收器有哪些

    串行回收器:新生代串行回收器、老年代串行回收器

    并行回收器:新生代ParNew回收器、新生代ParallelGC回收器、老年代ParallelGC回收器

    CMS回收器:(Concurrent Mark Sweep、并发标记清除)

    G1回收器(1.7以后代替CMS回收器)

    如何调优JVM

    标准参数:

    -client -server模式

    -Xmn、-Xms、-Xmx

    监控:jps、jstat、jinfo、jmap、jhat、jstack

    Java 中堆和栈有什么区别?

    JVM 中堆和栈属于不同的内存区域,使用目的也不同。

    栈常用于保存方法帧和局部变量,而对象总是在堆上分配。

    栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。

    缓存和NoSQL

    Memcache与Redis的区别

    memcache把数据存在内存之中,断电后会挂掉;Redis部分数据持久化在硬盘上,断电不会丢失。

    memcache存的是key-value对,redis支持更多的数据结构和数据类型

    memcache可以使用一致性hash做分布式,redis可以做主从同步

    redis单线程,只使用1个cpu

    如何实现Redis的分片

    使用一致性哈希对数据进行映射

    实现方式:客户端分片(每个客户端对应一个分片)、代理协助分片、查询路由分片;

    使用redis集群,如codis(豌豆荚,依赖zookeeper);

    分布式

    zookeeper的用途

    zookeeper作为分布式应用协调系统,已经用到很多分布式项目中。

    可以用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项等管理工作。

    zookeeper的主要操作分一下几种:

    创建节点

    读取节点数据

    更新节点数据

    删除节点

    监控节点变化

    应用场景:

    统一命名服务,使用create自动创建节点编号;

    配置管理,多个节点的共享配置,当配置发生变化时,可利用zookeeper让使用这些配置的节点获得通知,进行重新加载等操作。如dubbo服务。

    集群管理:集群选举主节点,资源定位。

    共享锁

    负载均衡

    应用项目:

    dubbo服务集群、redis集群、Hadoop集群等

    dubbo的用途以及优点

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

    转载于:https://my.oschina.net/u/2441327/blog/1830099

  • 相关阅读:
    最小花费
    LOJ10090
    LOJ2436
    loj10087
    LOJ2632
    LOJ10021 Addition Chains
    LOJ10019生日蛋糕
    loj10018数的划分
    LOJ10015扩散
    loj10014数列分段二
  • 原文地址:https://www.cnblogs.com/twodog/p/12136697.html
Copyright © 2020-2023  润新知