`
文章列表
读写锁的例子,半个ConcurrentHashMap class RWDictionary { private final Map<String, Data> m = new TreeMap<>(); private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock r = rwl.readLock(); private final Lock w = rwl.writeLock(); public Data ...

MYSQL索引

MYSQL常用索引 
  public interface ReadWriteLock { /** * Returns the lock used for reading. * 返回一个读锁 * @return the lock used for reading */ Lock readLock(); /** * Returns the lock used for writing. * 返回一个写锁 * @return the lock used for writing */ ...
public class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; // 内部类 private final Sync sync; //sync继承同步器,并生成模版 abstract static class Sync extends AbstractQueuedSynchronizer { ...

多线程Lock接口

public interface Lock { // 获取锁。调用该方法当前线程将会获取锁。当锁获取后,从该方法返回 void lock(); // 可中断的获取锁,和lock()方法的不同之处在于该方法会响应中断,既在锁的获取中可以终端当前线程 void lockInterruptibly() throws InterruptedException; // 尝试非阻塞的获取锁,调用该方法后立即返回,如果能够获取则返回true,否则返回false boolean tryLock(); //超时的获取锁,当前县 ...
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子类加载器才会尝试自己去加载。 protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized ...

验证阶段

类验证阶段思维导图  
类的加载主要是把二进制文件转换为class对象  对于一个类来讲,加载主要根据双亲委派模型,保证了相等性.  数组加载直接在虚拟机中进行,不通过类记载其创建。 
类的初始化和对象的初始化时不同的。 上面的图是类的初始化,接口的初始化没有静态代码块,而且在初始化时与类初始化有些差异。 类在初始化的时候要求其父类全部已经初始化过了,但是接口只有真正使用父接口的时候才会初始化。 参考《深入理解Java虚拟机》

面试三

1.所有的对象实例化都需要调用构造函数 ,个人为是对的,因为你new时候会调用,反射的时候也会调用默认的构造函数,克隆也会,因为构造函数就是为了防止属性不能正确初始化而设计的。 2. public class A { static { Sys ...

二分查找

使用while的方式进行查找 public static int binarySearch(int[] a, int key) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = low + (high - low) / 2; if (key < a[mid]) high = mid - 1; else if (key > a[mid]) low = ...

面试二

String a ="hello"; String b ="hello"; String c =new String("hello"); System.out.println(a==b); System.out.println(a==c); System.out.println(a==c.intern());  运行结果是 true false true  因为a和b会直接将hello放到方法区的常量池里面,而c不会, ...
搭建三台eureka,修改/etc/hosts 127.0.0.1 server1 127.0.0.1 server2 127.0.0.1 server3 如果显示readonly的话,mac请使用root模式 使用同一个jar包,外置yml优先级高于内置yml优先级 编写yml文件,配置一 server: port: 1111 eureka: instance: hostname: server1 client: registerWithEureka: false fetchRegistry: false ser ...
新建maven项目,然后在pom中加入依赖,参考springcloud网站,地址为https://projects.spring.io/spring-cloud/ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> ...

面试一

    1.mybatis插入时返回自增的主键 <insert id="add" parameterType="EStudent" useGeneratedKeys="true" keyProperty="id"> insert into TStudent(name, age) values(#{name}, #{age}) </insert>     2.mybatis中$和#的区别 #{} 可以 ...
Global site tag (gtag.js) - Google Analytics