自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 资源 (3)
  • 收藏
  • 关注

原创 从源码角度分析MyBatis中的设计模式

MyBatis 的前身是 IBatis,IBatis 是由 Internet 和 Abatis 组合而成,其目的是想当做互联网的篱笆墙,围绕着数据库提供持久化服务的一个框架,2010 年正式改名为 MyBatis。它是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,还可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Ordinary Java Object,普通 Java

2020-07-28 21:56:53 424

原创 Spring的核心功能及执行流程

Spring BeanSpring Bean的注册方式XML配置文件的注册方式Java注解的注册方式Java API的注册方式注意:xml的优先级会高于注解的优先级,即如果配置了xml和注解两种注册方式,则通过xml注册的属性值会覆盖注解设置的属性值。XML 配置文件注册方式<bean id="person" class="org.springframework.beans.Person"> <property name="id" value="1"/>

2020-07-28 17:02:52 635

原创 (Java并发基础)CAS原理

CAS 简介CAS 被广泛应用在并发编程领域中,以实现那些不会被打断的数据交换操作,从而就实现了无锁的线程安全。CPU 是一条操作系统指令。CAS 有三个操作数:内存值 V、预期值 A、要修改的值 B。CAS 最核心的思路就是,仅当预期值 A 和当前的内存值 V 相同时,才将内存值修改为 B。什么时候会用到 CAScas是一种乐观的线程安全实现方式。Doug Lea 大神在 JUC 包中大量使用了 CAS 技术,该技术既能保证安全性,又不需要使用互斥锁,能大大提升工具类的性能。ConcurrentH

2020-07-28 10:45:55 207

转载 (Java并发基础)阻塞队列

什么是阻塞队列阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列,下图展示了如何通过阻塞队列来合作:...

2020-07-27 21:07:00 278

原创 (Java并发基础)各种各样的锁

锁分为以下 7 大类别的特性偏向锁/轻量级锁/重量级锁;可重入锁/非可重入锁;共享锁/独占锁;公平锁/非公平锁;悲观锁/乐观锁;自旋锁/非自旋锁;可中断锁/不可中断锁。偏向锁/轻量级锁/重量级锁第一种分类是偏向锁/轻量级锁/重量级锁,这三种锁特指 synchronized 锁的状态,通过在对象头中的 mark word 来表明锁的状态。偏向锁如果自始至终,对于这把锁都不存在竞争,那么其实就没必要上锁,只需要打个标记就行了,这就是偏向锁的思想。一个对象被初始化后,还没有任何线程来获取

2020-07-26 13:36:50 127

原创 微信公众号获取GPS并计算距离及IP地址信息

IP地址获取NG配置所有经过的NG链路都需要配置以下内容。原因是因为location / { proxy_pass http://yun.baidu.com/baiduyunapp; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add

2020-07-21 09:13:19 1499

转载 (Java并发基础)线程池

线程池比手动创建线程好在哪里?为什么使用线程池?如果我们有10000个任务需要执行,如果创建10000个线程去执行,创建如此多的线程也会给稳定性带来危害,因为每个系统中,可创建线程的数量是有一个上限的,不可能无限的创建。线程执行完需要被回收,大量的线程又会给垃圾回收带来压力。但我们的任务确实非常多,如果都在主线程串行执行,那效率也太低了,那应该怎么办呢?于是便诞生了线程池来平衡线程与系统资源之间的关系。我们来总结下如果每个任务都创建一个线程会带来哪些问题:第一点,反复创建线程系统开销比较大,每个线程

2020-07-19 13:43:43 477

原创 Fegin调用修改httpheader

修改httpheader目前知道的有两种方式。通过在方法上加注解@RequestHeader此种方式比较灵活,但是如果需要全部请求都需要带上相同的header,建议采用第二种方式。第一种方式通过验证,第二种方式也试验过,但是我的需求是要求header头是动态变化的,所以第一种更加适合。@FeignClient(name = "risk-service")public interface RiskApiService { @PostMapping("/rule/call") Res

2020-07-17 17:51:51 925

原创 (Java并发基础)什么是线程安全?

什么是线程安全线程安全分类按照线程操作共享数据的"安全程度"可以分为:不可变,绝对安全,相对安全,线程兼容和线程对立。不可变对于共享数据是基本类型,通过定义该基本变量为final就可以保证它不可变,这种不可变性是在编译时确定的。在编译时,对于final变量,是必须初始化值的,不然编译器会报错,并且Java编译器将会将使用final变量的地方进行值替换。这样能提高运行时效率。如果共享数据是一个对象,需要保证这个对象的方法不对其变量进行重新赋值引用。java.lang.String就是一个典型的不

2020-07-16 09:05:39 450

原创 (Java并发基础)如何实现生产者消费者模式?

生产者消费者模式经常在面试中问到,并且很多面试官或者力扣的算法题中明确要求自己实现阻塞队列。什么是生产者消费者模式生产者消费者模式是程序设计中非常常见的一种设计模式,被广泛运用在解耦、消息队列等场景。在现实世界中,我们把生产商品的一方称为生产者,把消费商品的一方称为消费者,有时生产者的生产速度特别快,但消费者的消费速度跟不上,俗称“产能过剩”,又或是多个生产者对应多个消费者时,大家可能会手忙脚乱。如何才能让大家更好地配合呢?这时在生产者和消费者之间就需要一个中介来进行调度,于是便诞生了生产者消费者模式。

2020-07-15 00:16:29 170

原创 (Java并发基础)Object的wait/notify/notifyAll与Thread的关系

首先我们要知道Java中的每个类的父类都是Object,而Object中对象头中有个位置用来保存锁信息。这块将在高级部分进行深入讲解。为什么wait方法必须在synchronized保护的同步代码中使用?此方法会导致当前线程将自己放入该对象的等待集中,然后放弃对此对象的所有同步声明。线程T出于线程调度目的而被禁用,并处于休眠状态。其实就是让当前线程运行该该对象处,并让出CPU。先来段源码,因为源码说要“该方法的调用必须是拥有对象的锁"。也就是通过synchronized方法或代码块获取对象的锁。但是为

2020-07-14 23:31:39 168

转载 使用非对称算法RSA实现加解密和使用签名算法SHA1WithRSA、MD5withRSA生成签名以及验签

import org.apache.commons.codec.binary.Base64;import org.apache.commons.collections4.MapUtils;import org.apache.commons.io.IOUtils;import org.bouncycastle.asn1.ASN1Encodable;import org.bouncycastle.asn1.ASN1Primitive;import org.bouncycastle.asn1.pkcs.

2020-07-14 20:19:36 861

原创 (Java并发基础)线程的5种状态及转换

从下图可知,线程有5种状态。如果想要获取线程的状态,可以通过getState()方法获取。线程在任何时刻只能有一种状态。New状态New表示线程被创建但尚未启动的状态:当我们用new Thread()新建一个线程时,如果线程没有开始运行start()方法,所以也没有开始执行run()方法里的代码,那么此时它的状态就是New,一旦调用Thread.start()方法,则会从New变成Runnable。就是下图中的白色区域。Runnable可运行Java中的Runnable状态分别对应操作系统线程状态中

2020-07-14 00:10:54 632

原创 阿卡索口语学习(Learn And Talk 0)短语及单词(二)

Lesson 17 Cold and FeverFour phrasecoldfeverheadachecoughFour sentencesIt’s time to get up!I’m going to bed for the night. Good night!I’m tired. Wake me up in a bit.I couldn’t fall asleep.Other words related to this topicdrowsy 昏昏欲睡nap 打盹

2020-07-12 10:44:04 613

原创 阿卡索口语学习(Learn And Talk 0)短语及单词

Lesson 01 Sleeping and Waking UpFour phraseget upgo to bedwake upfall asleepFour sentencesIt’s time to get up!I’m going to bed for the night. Good night!I’m tired. Wake me up in a bit.I couldn’t fall asleep.Other words related to this topic

2020-07-07 22:20:35 907

Thinking in java读书笔记.docx

多年前thinking in java (4 edition)的读书笔记。记录了一些当时认为比较重要的知识点。

2020-09-06

web编程基础

javaBean,jsp,分页显示,表单验证,增减删查。数据库为MysQL,MyEclipse8.5通过测试。加QQ1243024108可以得到数据库脚本。

2013-08-14

NTC电阻测温程序

NTC电阻测温程序 单片机 C语言

2013-07-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除