摘要: 乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了。LZ之所以写这个系列博客就是因为遇到这个令人讨厌的问题,虽然是小问题但又不得不解决。 在这个系列博文中LZ并没有阐述归纳乱码的方法,出...阅读全文
posted @ 2015-01-30 16:53 chenssy 阅读(1525) 评论(1) 编辑
摘要: 岁月如梭,时光如流,2014年就这样从指间不经意间流过了!在这个流行写年总结的时候,我也按照惯例来份总结。 细说2014 时间总是这么不经意间地就流失了,在这不经意间我较为苦逼地,不甘地,欣慰地,满怀干劲地度过了2014。苦逼那是因为我不知道加班了多少个日日夜夜,不甘是因为我今年并没有很好地完成...阅读全文
posted @ 2015-01-09 09:14 chenssy 阅读(1956) 评论(22) 编辑
摘要: 程序员?从事程序开发、维护的专业人员,LZ非常荣幸加入这个“神圣”的行业。别人都自嘲为“程序猿”,而我喜欢尊称为“软件开发工程师”。不为别的,就为自己爱这行。大学 LZ大学才接触电脑,在大学之前连编程这个名词都没有听过,更不用说什么c、java、C#、C++了。高中时物理、化学、生物比较好,平时考试理综分数就没有低260,尤其是化学,所以填报志愿全部都是跟物理、化学相关的,奈何天不遂人愿,录取专业是与计算机相关专业。LZ接到通知书就想骂人(坑爹,LZ是复读生但是复读等于白复读,还是同样的学校……)。 虽然没有录取到心仪的专业,但是LZ有一颗不服输的心,大一开始我选择自学化学专业,搞双学士学位.阅读全文
posted @ 2014-01-20 20:20 chenssy 阅读(9448) 评论(87) 编辑
摘要: 从七月份开始一直到九月底才看完设计模式,在这个过程中我不敢说我已经掌握了那本书里面的内容,或者说1/5,没能力说也没有资格说。但是结果不重要,重要的是这个过程我的收获!主要包括如下几个方面: 1、认识了这么多设计模式。刚刚接触java没多久就在学长那里听过设计模式的大名,但是由于能力有限,一直不敢触碰。而今有幸将其都认识了。 2、开始有设计的理论了。在接触设计模式之前没有怎么想过设计方面东东,看到问题就立马动手解决,没有想到怎么样来设计更好,如何来是这块更加优化、漂亮。 3、开始考虑系统的可扩展性了。 4、在遇到问题后开始想有那个设计模式会适用这个场景。 5、对面向对象有了更深一步的了解。 .阅读全文
posted @ 2013-10-08 19:12 chenssy 阅读(21794) 评论(63) 编辑
摘要: 这是一篇迟到的博文,应该说是心得,本来月初就计划写的,但是由于最近项目很赶(几乎天天加班,但是没有加班费,坑啊!!!),所以一直拖到现在,幸好今天老大大发慈悲,说是七夕,让我们过节去(没有女朋友只能陪电脑过节啦,),所以就今晚把这个总结给写了。实习 从3.1号开始到公司实习,到现在也有4个月了(中间一个月回学校搞毕设),在这个四个月中,真的学到了非常多的东西,不管是知识上的,还是为人上的。 在实习期间一去向各位一样,不断的看文档,看代码,刚刚开始感觉还挺新鲜的,也看的进去,但是随着时间的递增,发现真的很无聊,于是主动跟老大说,“老大,有没有任务交给我做啊“。 老大说:文档你看完啦?项目流程你.阅读全文
posted @ 2013-08-13 23:24 chenssy 阅读(5431) 评论(42) 编辑
摘要: 在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见? 我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见阅读全文
posted @ 2017-02-13 13:08 chenssy 阅读(766) 评论(1) 编辑
摘要: 通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对vo阅读全文
posted @ 2017-02-08 17:46 chenssy 阅读(914) 评论(2) 编辑
摘要: 我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean。同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然后根据这些信息绑定整个系统的对象,最终组装成一个可用的基于轻量级容器的应用系统。 Spring Io阅读全文
posted @ 2016-06-27 09:09 chenssy 阅读(1670) 评论(4) 编辑
摘要: 首先我们先来看看如下一段代码 ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader...阅读全文
posted @ 2016-06-12 16:21 chenssy 阅读(1045) 评论(0) 编辑
摘要: 2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习、看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础、Spring研究、java并发、JVM、分布式之类的。在今年面试的时候深受打击,到处都是问分布式、集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式、集群之类的? 2016书单如下: 1、深入理解Java虚拟机:JVM高...阅读全文
posted @ 2016-05-04 08:53 chenssy 阅读(3920) 评论(26) 编辑
摘要: IOC:Inversion of Control(控制反转)。IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想。IOC的核心思想就体现在控制、反转这两个词上面,要理解就必须要理解几个问题: 1、谁控制谁?在传统的开发工作中,我们一般都是主动去new一个对象,这个是主动控制依赖对象。但是对于IOC而已,控制权会被移交给容器,所以应该是IOC容器控制对象。 2、...阅读全文
posted @ 2016-01-06 17:50 chenssy 阅读(1916) 评论(3) 编辑
摘要: 在【Java并发编程实战】—–“J.U.C”:CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改成阻塞唤醒。其结构如下: 知道其结构了,我们再看看他...阅读全文
posted @ 2015-12-30 08:24 chenssy 阅读(1269) 评论(1) 编辑
摘要: 在上篇博客(【Java并发编程实战】----- AQS(二):获取锁、释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起;在释放锁后,需要唤醒该线程的继任节点 lock方法,在调用acquireQueued(): if (shouldParkAfterFailedAcquire(p, node) && par...阅读全文
posted @ 2015-12-27 11:22 chenssy 阅读(811) 评论(0) 编辑
摘要: 上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放。 AQS锁获取 AQS包含如下几个方法: acquire(int arg):以独占模式获取对象,忽略中断。 acquireInterruptibly(int arg): 以独占模式获取对象,如果被中断则中止。 acquireShared(int arg): 以共享模式获取对象,忽略中断。 acquireSharedI...阅读全文
posted @ 2015-12-24 17:47 chenssy 阅读(998) 评论(0) 编辑
摘要: 在前面博客中,LZ讲到了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch,他们都有各自获取锁的方法,同时相对于Java的内置锁,他们具有明显的优势:花最小的空间开销创建锁、最少的时间开销获得锁、使用更加方便灵活。 参考Java的内置锁,对于JUC同步器而言,他应该具备两个最基本的功能:获取锁,释放锁。其中获取锁应该是先判断...阅读全文
posted @ 2015-12-17 17:43 chenssy 阅读(2157) 评论(0) 编辑
摘要: 在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列。他能够确保无饥饿,严格的先来先服务的公平性。下图是CLH队列节点的示意图: 在CLH队列的节点QNode中包含有一个locked的字段,该字段表示该节点是否需要获取锁,为true表示需要获取,为false表示不需要获取。在CLH队列中,节点与节点之间并不是通过next指针来连接的而是通过my...阅读全文
posted @ 2015-12-10 09:40 chenssy 阅读(1085) 评论(0) 编辑
摘要: CAS,即Compare and Swap,中文翻译为“比较并交换”。 对于JUC包中,CAS理论是实现整个java并发包的基石。从整体来看,concurrent包的实现示意图如下: i++是一个非常经典的操作,它几乎充斥着我们每个人编写的代码中。我们知道i++是可以分解的,它分解为getI()、i + 1 、setI三个步骤,所以它并不是原子操作。如果i==1,执行两次i++操作,我们期...阅读全文
posted @ 2015-12-07 09:18 chenssy 阅读(877) 评论(2) 编辑
摘要: 前面介绍了三个同步辅助类:CyclicBarrier、Barrier、Phaser,这篇博客介绍最后一个:Exchanger。JDK API是这样介绍的:可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchang...阅读全文
posted @ 2015-11-30 09:07 chenssy 阅读(610) 评论(0) 编辑
摘要: Phaser由java7中推出,是Java SE 7中新增的一个使用同步工具,在功能上面它与CyclicBarrier、CountDownLatch有些重叠,但是它提供了更加灵活、强大的用法。 CyclicBarrier,允许一组线程互相等待,直到到达某个公共屏障点。它提供的await()可以实现让所有参与者在临界点到来之前一直处于等待状态。 CountDownLatch,在完成一组正在其他线...阅读全文
posted @ 2015-11-23 20:08 chenssy 阅读(1001) 评论(4) 编辑
摘要: = 0<span style="color: 000000" ) { setHeadAndPropagate(node, r); p.next </span = <span style="color: 0000ff" null</span ; <span style="color: 008000" ...阅读全文
posted @ 2015-11-11 19:23 chenssy 阅读(665) 评论(0) 编辑