zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/twodog/p/12136696.html
Copyright © 2011-2022 走看看