• 9.Java中的锁原理、锁优化、CAS、AQS

    一、为什么要用锁?

    锁-是为了解决并发操作引起的脏读、数据不一致的问题。

    二、锁实现的基本原理

    2.1、volatile

    Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。
    volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。

    image

    • 结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。
  • 8.深入理解springAOP原理

    springAOP是什么springAOP原理动态代理原理动态代理底层实现
  • 7.深入理解springIoc原理

    springIoc是什么springIoc原理反射原理反射底层实现
  • 6.ConcurrentHashMap原理

    ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7).

    ConcurrentHashMap实现原理

      众所周知,哈希表是中非常高效,复杂度为O(1)的数据结构,在Java开发中,我们最常见到最频繁使用的就是HashMap和HashTable,但是在线程竞争激烈的并发场景中使用都不够合理。

  • tcp三次握手四次挥手

    tcp三次握手四次挥手三次握手: 第一次:客户端给服务器发请求说,我要和你建立连接 SYN=1 第二次:服务器给客户端说,我知道了,那咱两建立连接把 ACK=1 SYN=1 第三次:客户端对服务器说,好的,我知道你知道 我要和你建立连接了 ACK=1 为什么不是两次握手呢? 第一次:客户端给服务器发请求说,我要和你建立连...
  • 15.spring bean的生命周期

    spring bean的生命周期

    Spring上下文的生命周期

    1. 实例化一个Bean,也就是我们通常说的new

    2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入

    3. 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID

  • 你连清晨都控制不了,何谈人生?

    你连清晨都控制不了,何谈人生?

    一日之计,始于清晨。南怀瑾先生曾说过:“能控制早晨的人,方可控制人生。”人生的改变,也许就是伴随着清晨的6点钟闹铃开始。

    以史为鉴

      自古以来,官员便要在清晨上早朝。汉代贾谊在《新书·官人》中写到:“清晨听治,罢朝而议论。”加上古时候车马不便,算上起床、梳洗、换上朝服的时间,官员们至少需要提早半个时辰,即一个小时起床。”五鼓初起,列火满门,将欲趋朝,轩盖如市。”雾色朦胧中,百官上朝。

  • 5.LinkedHashSet的实现原理

    1. LinkedHashSet概述:

       LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。

    • 注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外部同步。
  • 4.HashSet的实现原理

    1. HashSet概述:

       HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。

  • 3.LinkedHashMap的实现原理

    1. LinkedHashMap概述:

        LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

        LinkedHashMap实现与HashMap的不同之处在于,前者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

    • 注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。
  • 2.HashMap的实现原理

    1.HashMap概述:

        HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

    2.HashMap的数据结构:

       在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

  • 1.ArrayList的实现原理

    1. ArrayList概述:

       ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。

       每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。

    • 注意,此实现不是同步的。如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。
  • 5.编译器自动优化导致代码可以先后写的问题

    123456789101112public class Demo1 { static { test = 1;// System.out.println(test); } static int test; public static void main(String[] args) { ...
  • 3.JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    JVM区域总体分两类,heap区和非heap区。

    • heap区又分为:

      • Eden Space(伊甸园)、
      • Survivor Space(幸存者区)、
      • Old Gen(老年代)。
    • 非heap区又分:

      • Code Cache(代码缓存区);
      • Perm Gen(永久代);
      • Jvm Stack(java虚拟机栈);
      • Local Method Statck(本地方法栈);

    下面我们对每一个内存区域做详细介绍。

  • 程序员最艰巨的十大任务

    程序员最艰巨的十大任务 程序员最艰巨的任务跟编写代码没有多少关系。编码是逻辑思路的一种实践,这跟程序员日常工作中的其它任务比起来相对简单。如果你认为自己还是一个水平一般的程序员,在你真正的能进入到高手行列前,请确保你已经克服了下列晋级的障碍。 解释你在干什么 解释软件开发过程是一个很困难的事情。那些非程序员职业的人也许知道很多关于编程的事情,但很显然,他们不会编程。对于他们来说,我们的生...
  • 1.String的split小记

    1234567public class SplitDemo { public static void main(String[] args) { String a = "abcooob"; String[] as = a.split("o"); System.out.println(a...
  • 2.强引用、软引用、弱引用、虚引用

    Java四种引用包括强引用,软引用,弱引用,虚引用。 强引用:只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用...
  • centos安装常用工具

    1、jdk安装去官网找到最新或者想要下载的版本的连接。通过wget获取。推荐用tar方式安装。 解压 tar -xvzf jdk-7u25-linux-x64.tar.gz -C /opt/jvm/ cd /opt/jvm 重命名 mv jdk... jdk7 vi /etc/profile 插入 #java env JAVA_HOME=/home/gcs/user/java/jdk1.7....
  • 4.mybatis3 中provider的使用

    mybatis3提供了4个**provider注解,分别对应增删改查,分别是:InsertProvider、DeleteProvider、UpdateProvider、SelectProvider;如何使用这些注解呢? 1.这些注解都有统一的2个入参,一个是type,一个是method。type参数的值是你动态sql的类(A)class文件,method是类(A)中的方法名。当然,这些方法...
  • java基础题1

    1.多态是什么,接口有什么用(为什么要使用接口编程)?

    • 多态是编译时和运行时表现的形态不同的,在继承和实现关系中,多态主要表现是编译时是父类的形态,运行时是子类的形态.
    • java中接口的作用:
    • 1.解决java中的多继承的问题.接口也为了实现松耦合的思想.
    • 2.因为jdk动态代理中必须是接口和实现类的方式.
  • java面试题(1)

    一套偏向初级和中级开发人员的面试题,答案可以自己脑补下,或者百度下,后续有空会逐个写下博客.

    一、基础篇

    1.1、Java基础

    • 面向对象的特征:继承、封装和多态
    • final, finally, finalize 的区别
    • Exception、Error、运行时异常与一般异常有何异同
    • 请写出5种常见到的runtime exception
    • int 和 Integer 有什么区别,Integer的值缓存范围
    • 包装类,装箱和拆箱
    • String、StringBuilder、StringBuffer
  • java面试题-基础篇

    面向对象的特征:继承、封装和多态

    • 继承:子类继承父类所有非私有的属性和方法,使得子类有父类的一些特性。
    • 封装:把对象属性和操作包围起来,向外提供接口和操作的方法
    • 多态:父类在运行的提现子类的属性和方法。
  • 十七条成功定律

    十七条成功定律

                                  ——最有价值、带有规律性的定律
                                  
    

    1. 积极的心态(PMA黄金定律)

    积极的心态包括诚恳、忠诚、正直、乐观、勇敢、奋发、创造、机智、亲切、友善、积极、向善、向上、进取、努力、愉快、自信、自勉和有安全感等。

    2. 明确的目标

    你过去和现在的情况并不重要,你将来想获得什么成就才是最重要的。有目标才会成功,如果你对未来没有理想,就做不出什么大事来。

  • 生命的空隙

    生命的空隙以前很喜欢很喜欢的一段文字.在qq空间存放很久了,把它放在这里方便我可以时常看看.  很多时候,我们需要给自己的生命留一点空隙,就像两车之间的安全距离-——一点缓冲的余地,可以随时调整自己,进退有据。   生活的空间,须借清理挪减而流出;心灵的空间,则经思考开悟而扩展。打桥牌时,我们手中所握有的这副牌不论好坏,都要把它打得淋漓尽致;人生亦然,重要的不是发生了什么事,而是我们处理...
  • 快乐箴言

    快乐箴言

      很久以来,人们都认为快乐是理所当然的事,若想拥有它只能顺其自然,不可强求。如今,我们却逐渐意识到,我们与他人的和睦相处是可以创造快乐的。我们可以通过某种方式,使别人更加喜欢自己。一个方式就是不要自私。不要期望任何事情都符合我们自己的方式,不要奢求拥有太多,包括朋友的注意力。另一个方式是在别人身上寻找优点而不是缺点。你会惊奇地发现,这样会给你带来多么大的成功。

  • 成为编程高手的八大奥秘

    成为编程高手的八大奥秘世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。 1、扎实的基础数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计...
  • 给Centos系统设置静态IP

    如果我们想更改主机地址为静态地址或者更改主机名,需要修改的几个文件包括:/etc/sysconfig/network Centos设置主机名和网络配置/etc/sysconfig/network-scripts/ifcfg-eth0 针对特定的网卡进行设置/etc/resolv.conf 设置D...
1101112