2022-02-28 开发工具 idea常用功能笔记 工欲善其事,必先利其器,在idea中有很多功能都可以提高做事的效率。这些功能太多,很难全部都记住,以下是自己使用过程中的一些记录,方便换电脑时进行参考。 继续阅读全文 »
2022-02-28 java java stream api熟悉和理解 前言stream api和lambda表达式都是java8出来的,都可以简化代码,也经常会配合着使用。对于上边的说法,网上是这么说的,但是我自己写的时候,总觉得好像有的时候确实简洁很多,但也有时候似乎反而更麻烦。所以,根据我目前的理解,我觉得可能它有它的适用场景,但并不能说用它就一定好,但是以后会不会改变这种看法也很难说。就我目前的了解,stream api主要用在对list集合及数组的操作,最大的优势在于各种中间操作。stream api是把集合等数据转化成stream,然后提供了一系列的api,尤其是很多返回stram的中间操作api。单纯的描述可能不好理解,下边是一些基础的示例和对比。 继续阅读全文 »
2022-02-28 java lambda表达式基础 前言早在JAVA8出来的时候,我实际就已经了解过一点点lambda表达式和stream流,但是由于写惯了原来的那种风格,再加上当时的项目中也没有什么人使用,所以只是一扫而过,没有深入了解,也没有进行任何的练习,甚至还有那么一点抵触,觉得lambda读起来太不好懂。 继续阅读全文 »
2022-02-27 java java基础之多线程总结三(AQS、ThreadLocal和线程池) AQS多线程里很多新型锁实现的关键是AQS,AQS指的是AbstractQueuedSynchronizer这个类,整个锁实现过程的关键是CAS操作加volatile。拿ReentrantLock非公平锁的lock和unlock举例,首先lock的源码中调用过程如下: 1ReentrantLock.lock()-->ReentrantLock.Sync.lock()-->ReentrantLock.NonfairSync.lock() 继续阅读全文 »
2022-02-25 java java基础之多线程总结二(CAS和各种常用锁) CAS在java中,对很多常见的需要加锁的操作进行了封装,例如Atomic开头的一些类,这些类是线程安全的,但是内部却不是用synchronized加锁实现,而是CAS。例如AtomicInteger的’incrementAndGet()’方法最终调用的实际是下边这个方法 1234@HotSpotIntrinsicCandidate public final native boolean compareAndSetInt(Object o, long offset, int expected, int x); 继续阅读全文 »
2022-02-25 服务限流 使用spring-cloud-zuul-rate-limit在zuul中为服务限流 前言几个月前做过一个springCloud服务限流的任务,当时选定的技术是spring-cloud-zuul-rate-limit。之所以选这个而不是别的,是因为项目本身使用了zuul,而且业务需求上spring-cloud-zuul-rate-limit的功能刚好都可以满足,在这种情况下就可以在符合要求的同时尽可能快的完成。 继续阅读全文 »
2022-02-23 java java基础之多线程总结一(创建、状态、synchronized和volatile) 线程基本创建和启动方式不考虑线程池的情况下,创建和启动线程的基本方式有如下几种1.直接new Thread类或者子类,2.实现runnable接口然后传递给Thread,这种方式更加灵活3.使用lambda表达式,实际上是实现runnable另一种写法 继续阅读全文 »
2022-01-08 java java基础之结合源码理解集合(非concurrent) 集合常用接口和类java中的集合非常重要,是一种容器,也是一种引用数据类型,集合相关的接口和类非常多,不考虑concurrent中的情况下,最常见的有如下这些: 继续阅读全文 »
2021-08-22 修心•修性•修行 时隔九月再起航 时间过得真快,不知不觉间来广州已经四个多月了,已经超过了上一份工作的时间,算是初步稳定了下来。回头望去,从去年十一月份离开上上一份工作到现在,九个多月的时间,换了两份工作,很多的经历惶惶然还像是在做梦一样。这种种的经历,也一步步验证着那些耳熟能详的道理,比如心急吃不了热豆腐,比如塞翁失马焉知非福。 继续阅读全文 »