java
文章平均质量分 92
TasIsMe
这个作者很懒,什么都没留下…
展开
-
Java并发编程系列——锁:synchronized
锁是并发编程里保证数据线程安全的一个重要的工具。今天就来了解下,java里的锁。如何实现一个高并发的计数器我们首先来考虑一个问题,如何实现一个高并发的计数器。稍微了解过java的人应该立马能想到"synchronized"关键字。但是事实上,在Java里可以通过各种方式来实现线程安全的计数器。这篇文字将会解锁以下几种方式,并详细的解锁每一种锁的机制。synchronizedLock接口...原创 2019-03-31 12:09:26 · 196 阅读 · 0 评论 -
Spring-3.Spring MVC
MVC为什么我们强调Spring MVC而不是MVC,因为MVC是一个很广泛的词,不仅有Spring MVC,还有C#的MVC,各种MVC。概念大同小异,而实现方式则千差万别。M:Model指数据模型以及对数据的处理方式,有对数据的直接访问权限,所以我们写的逻辑包括Service等,都是Model。V:View指视图,在spring中可以使用Thymeleaf等来做视图。不过现在大都提倡前后...原创 2019-08-20 19:25:28 · 139 阅读 · 0 评论 -
Java集合-2 数组,ArrayList,Vector,CopyOnWriteArrayList ,LinkedList
数组特点数组是最基础的数据结构,它会在初始化申请一块连续的固定的内存区域。所以数组的访问速度很快,时间复杂度是O(1),但是由于是固定的区域,所以数组的长度在初始化之后是无法修改的。ArraysArrays是一个便于操作数组的类sort:为数组排序binarySearch:在数组中进行二分查找equals:比较两个数组fill:为数组的每一个元素填充数据copyOf/copy...原创 2019-08-14 18:38:15 · 144 阅读 · 0 评论 -
Java集合-1.HashMap,HashTable,ConcurrentHashMap,TreeMap,LinkHashMap,HashSet,TreeSet,LinkedHashSet
HashMap基础结构:数组+链表HashMap是一个支持键值对的数据结构,使用数组和链表实现。每个数组保存的是一个链表。插入元素的步骤首先计算出key指的hashCode,找出元素应该落在数组的哪个位置上(或称为槽)。如果对应的槽没有元素,则添加到链表的第一个元素。如果对应的槽的链表已经有元素了,则往后添加到链表的头。在java1.8之后,如果链表的长度超过8,会进化为红黑树,优...原创 2019-08-14 18:35:43 · 409 阅读 · 0 评论 -
Spring-2.AOP
用法示例@Aspect@Componentpublic class WebLogAspect { private Logger logger = Logger.getLogger(getClass()); @Pointcut("execution(public * com.didispace.web..*.*(..))") public void webLog()...原创 2019-08-19 18:08:36 · 161 阅读 · 0 评论 -
java-基础知识:面向对象,反射,泛型,异常和错误,注解,序列化和反序列化,动态代理
面向对象继承:使用继承,能够复用父类的代码,而且维护和修改更容易。如果是通用方法,直接修改父类。如果是针对个别的方法则可以直接修改子类。多态:对父类方法进行重写后,调用各个子类的同一名方法,表现出不同的状态,称为为多态。而且在使用父类的地方可以使用子类,所以有些方法可以不用关心传入的参数是属于哪个子类,直接调用方法即可,典型的就是回调方法。抽象:抽象是指,把类的方法行为抽象出来,而不去关心...原创 2019-08-19 17:11:09 · 288 阅读 · 0 评论 -
JVM-4.字节码执行和方法调用
本文问题1.线程在是如何运行代码的,代码和数据在线程中的结构是字母样的?2.方法是如何被调用的。1.运行时栈帧结构栈帧线程运行代码是基于栈帧的,这里不要跟操作数栈搞混了。线程使用一个栈来保存栈帧,而一个栈帧则代表了一个方法,包含了局部变量表,操作数帧,动态链接,和返回地址。另外,为了优化,帧之间并不是完全无关的,有些会把数据存放在共享区域,避免复制。局部变量表局部变量表顾...原创 2019-08-06 18:40:26 · 208 阅读 · 0 评论 -
JVM-6.Java线程内存模型和线程实现
java线程内存模型主内存和工作内存Java的线程内存包括主内存和工作内存。这里的内存模型和jvm的内存区域并没有直接的关系,如果非要对应起来,那么主内存对应的是java堆,工作内存对应的是虚拟机栈。工作内存是每个线程私有的,而主内存则是共享的。线程并不直接操作主内存的数据,而是先操作工作内存里保存的副本,然后再同步到主内存中。volatile的特殊规则volatile有两...原创 2019-08-08 18:08:37 · 193 阅读 · 0 评论 -
JVM-3.类的加载机制
上一篇文章总结了字节码相关的知识,本文则将总结类加载相关知识。包括类是在什么时候被加载的。类是如何被加载的。类的双亲加载机制是什么。1.类在什么时候被加载使用new创建对象,读取类的静态字段或者方法的时候使用反射进行调用的时候初始化一个类,且其父类未加载时,触发其父类加载虚拟机启动时,需要执行一个主类(包含main方法的类)动态语言解析后触发调用静态的类属性或方法2.类...原创 2019-08-06 15:44:35 · 128 阅读 · 0 评论 -
JVM-5.程序编译与代码优化
java中有两种编译,第一种是由java代码编译成字节码(使用javac编译器),第二种则是由字节码编译成对应平台的机器码(使用即使编译器JIT)。但并不是所有的字节码都会被编译,大部分代码都是直接解释执行(使用解释器),只有热点代码才会被编译成机器码。编译期优化(javac编译器)编译过程解析和填充符号解析的过程分为词法语法解析和填充符号,词法解析是把源代码解析成最小元素,如“in...原创 2019-08-08 15:15:51 · 1719 阅读 · 0 评论 -
JVM-2.字节码和字节码指令
我们都知道,java代码经过编译之后,会转换为字节码。那么字节码是什么?他的结构是怎么样的?字节码是怎么被执行的?这些问题本文都尝试去回答。1.字节码是什么字节码是什么,当我们编译java程序之后,便会生成.class文件,使用文本编辑器打开.class文件。你会看到一大堆数字,不过你仔细观察会发现前8个字符居然是“cafe babe”,咖啡宝贝。这让人想起java的logo也是...原创 2019-08-05 17:55:30 · 309 阅读 · 0 评论 -
JVM-1.自动内存管理
和大多数高级语言一样,java也有自动回收内存的机制。给程序员们带来河大的便利,而不用和c++一样,时刻当心内存溢出。那么,jvm的自动内存管理机制是如何实现的?关键点1.jvm运行时内存分布2.垃圾回收器和垃圾回收算法3.虚拟机对象:对象的创建,访问和删除4.性能监控工具1.JVM的运行时区域jvm运行时内存被分配为不同的块,以实现不同的作用。java 1.7和之前的区...原创 2019-08-01 10:46:54 · 188 阅读 · 0 评论 -
java 字符串常量池
简单的问题先看一个简单的经典问题String s1 = "Hello";String s2 = "Hello";String s3 = new String("Hello");System.out.println(s1==s2);//trueSystem.out.println(s1==s3);//true首先说明“==”比较的是引用地址而不是值,比较值用equals方法。这个原...原创 2019-07-16 17:35:49 · 193 阅读 · 0 评论 -
Spring-4.Spring 事务
Spring事务的使用@Transactionalpublic void test(){}使用@Transactional注解在方法上,即可使得方法以事务的形式运行,当发生UnChecked的错误时,就会回滚。注意,如果能够被try不过的异常时不会回滚事务的,可以通过roolbackFor指定异常,捕获后回滚,或者使用TransactionAspectSupport.currentTra...原创 2019-08-21 17:16:04 · 122 阅读 · 0 评论