自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大龄毕业生的博客

大龄毕业生学习中

  • 博客(54)
  • 资源 (6)
  • 收藏
  • 关注

原创 taos 写入数据 报taos connect failed, reason: Unable to establish connection. 同时Cluster not ready

TDengine (TAOS) 数据库

2022-01-01 16:13:06 4970

原创 Java多线程编程核心技术—— 1.java 多线程技能

进程:进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位,进程是受操作系统管理的基本运行单元。线程:可理解为在进程中独立运行的子任务。进程负责向操作系统申请资源。在一个进程中,多个线程可以共享进程中相同的内存或文件资源。public class MyThread extends Thread { @Override public void run() { .

2021-11-25 18:36:04 639

原创 虚拟机类加载机制-0804

虚拟机类加载机制概念:把类的数据从class文件加载到内存,对数据进行校验、转换、解析和初始化,最终形成可以直接被虚拟机使用的java类型。java可以动态拓展的特性就是依赖运行期间动态加载和动态连结的特点类加载时机类从加载到内存到卸载出内存,生命周期:加载->连接(验证>准备->解析)->初始化->使用->卸载加载通过一个类全限定名来获取这个类的二进制字节流将字节流代表的静态存储结构转换为运行时数据结构在内存中生成一个class对象,作为访问这个类的

2021-08-04 23:20:18 100

原创 自学redis 操作命令

public class User implements Serializable { private static final long serialVersionUID = 7313908511206187571L; private int id; private String userId; private String userName; private String passWord; private String role; p

2021-02-28 19:54:24 94

原创 mongo 语句学习

@Document(collection = "article_info")public class Article { @Id private String id; @Field("title") private String title; @Field("url") private String url; @Field("author") private String author; @Field("tags") .

2021-02-01 23:51:19 118

原创 垃圾收集器与内存分配策略-学习笔记2

程序计数器、虚拟机栈、本地方法栈三个区域都是随着线程而生,随线程而死。栈中的栈帧随着方法的进入和退出执行进入出去的操作,每一个栈帧分配多少内存在类结构确定下来的时就基本确定了,因此,这些区域不太考虑垃圾回收的问题。因为方法结束或者线程结束,内存自动就回收了java堆和方法区不同,一个接口中多个实现类所需的内存可能不一样,我们只有在程序运行期间才知道创建那些对象。内存分配是动态的就需要关注垃圾回收引用计数法public class ReferenceCountingGC { public O

2020-11-22 20:57:42 81

原创 深入理解JAVA虚拟机-学习笔记(java内存区域)

程序计数器Program Counter Register:是一个较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。(分支、循环、异常等功能都需要这个计数器来完成)。java虚拟机的多线程都是通过线程轮流切换并分配处理执行时间的方式来实现的(时间片),在任何一个时刻,一个处理器只能执行一条线程中的指令。因此。为了线程切换后可以恢复到正确的位置(上下文切换),每条线程都需要一个独立的程序计数器,独立存储。称为“线程.

2020-11-19 00:12:22 91

原创 线程池基本概念

线程池的处理流程如果当前运行的线程小于corePOOLSize,则创建线程执行任务(需要获取全局锁)运行的线程多余等于corePoolSize,将任务加入BlockingQueue。如果无法加入BlockingQueue(队列已满),则创建新的线程来处理任务。如果创建新的线程使得当前运行的线程超出maximumPoolSize,任务将被拒绝。...

2020-11-12 23:34:48 108

原创 可重入锁、读写锁

ReentrantLock:重入锁。表示该锁能够支持一个线程对资源的重复加锁.任意线程在获取到锁之后能够再次获取该所而不会被锁阻塞。之前写的Mutex是一个不支持的重入的独占锁。实现可重入线程再次加锁:锁需要去识别获取锁的线程是否为当前占据锁的线程,如果是,则再次获取。锁的最终释放:线程重复N此获取了锁,随后在第N次释放该锁后,其他线程能够获取到该锁。锁的最终释放要求锁对于获取进行计数增加,计数表示当前锁被重复获取的次数,而被锁释放的时候,计数自减,当计数等于0的时候表示锁已经成功释放。 f

2020-11-11 22:52:39 383 1

原创 AQS队列同步器的实现分析-共享锁

共享式同步状态的获取与 释放共享式获取与独占式的区别在于同一时刻能否有多个线程同时获取到同步状态。写操作要求对资源的独占式访问。读操作可以是共享式访问。左边:共享式访问资源,其他共享式访问都被允许,而独占式被阻塞右边:独占式。同一时刻,其他访问都被阻塞。 public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg);

2020-11-10 23:06:52 100

原创 AQS队列同步器的实现分析-独占锁

同步队列:感觉全部都是特别重要的,就都加粗了。排版不好看。尴尬同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态时失败时,同步器会将当前线程和等待信息构造成一个NODE节点并将其放入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。可以看到:同步器包含:一个指向头结点的引用,一个指向尾节点的引用。为了保证获取同步状态失败的线程加入队列线程安全,用了CAS的方法这是尾节点。首节点是获取同步状态成功的节点。首节点

2020-11-10 00:07:01 75

原创 锁-独占锁、同步队列器

Lock接口锁是用来控制多个线程访问共享资源的方式。一个锁可以防止多个线程同时访问共享资源(读写锁,允许多个线程并发的访问共享资源) public static void main(String[] args) { Lock lock = new ReentrantLock(); lock.lock(); try { } finally { lock.unlock(); } }这是锁的

2020-11-08 22:26:59 111

原创 终于到线程池了

public interface ThreadPool<Job extends Runnable> { //执行一个job这个job需要实现runnable void execute(Job job); //关闭线程池 void shutdown(); //增加工作者线程 void addWorkers(int num); //减少工作者线程 void deleteWorkers(int num); //获取正在等待

2020-11-08 14:00:41 74

原创 线程间通信-java并发编程的艺术

volatile synchroizedjava支持多个多个线程同时访问一个对象或者对象的成员变量,由于每个线程都可以拥有这个变量的拷贝,这样的目的在于加速程序的执行。所以,一个线程看到的变量的并不一定就是最新的。volatile可以修饰字段(成员变量),就是告知程序任何对该变量的访问都需要从共享内存中获取,对他的改变必须同步刷新到共享内存(主内存),保证所有线程对这个变量的可见性。synchorized可以修饰方法或者修饰代码块,主要就是确保多个线程在同一时刻,只能有一个线程处于方法或者代码块中,

2020-11-08 01:08:26 144

原创 java并发编程的艺术-安全的终止线程

传统的suspend()方法,在调用后,线程不会释放已经战友的资源比如锁之类的,而是占着资源休眠,这样容易死锁。stop方法在终结一个线程的时候不会保证线程的资源正确释放,通常是没有给予线程完成资源释放的机会,因此,程序可能存在不确定。中断就是一个合适的取消或者停止任务的方法。除了中断,还可以利用boolean变量来控制是否需要停止任务并终止该线程。public class ShutDown { public static void main(String[] args) throws In

2020-11-07 22:07:35 94

原创 java并发编程的艺术-java并发编程基础

线程:操作系统的最小调度单位(轻量级进程)。在一个进程中可以有多个线程,这些线程都拥有自己的计数器、堆栈、局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,使得我们觉得是同时执行的。调度线程:操作系统会分出一个个时间片,线程会分配到若干时间片,当线程的时间片用完了就会发生线程调度,并等待着下一次分配。线程优先级就是决定线程或多或少分配一些处理器资源的线程属性。public class Priority { private static volatile boolean no

2020-11-07 21:24:06 159

原创 java初始化一个类的处理过程

第一阶段通过在Class对象上同步(即获取class对象上的锁),来控制类或者接口的初始化,这个获取锁的线程会一直等待,知道当前线程获取到这个初始化锁。假设Class对象当前没有被初始化,(初始状态为state,标记state =noInitialzation),且有两个线程AB同时试图初始化这个对象第二阶段线程A执行类的初始化,同时B在初始化锁的condition上等待第三阶段,A设置state=initialized,然后唤醒在condition中等待的所有线程B结束类的初始化处理.

2020-11-07 15:27:40 155

原创 java并发编程的艺术--锁的内存语义、双重检查锁定

由于volatile仅仅保证单个volatile变量的读/写变量读/写具有原子性,而锁的互斥性的特性可以确保对转增个临界区代码的执行具有原子性。 int a = 0; public synchronized void writer() { //1 a++;//2 } //3 public synchronized void reader() { //4 int i = a; //5 //.... } //6根据程

2020-11-07 00:21:22 114

原创 volatile内存语义的实现

为了实现volatile的内存语义,编译器在生成字节码时,会把指令序列中插入内存屏障来禁止特定类型的处理器重排序。下面是基于保守策略的JMM内存屏障插入策略在每个volatile写操作前面插入一个StoreStore屏障在每个Volatile写操作后面插进入一个StoreLoad屏障在每个volatile读操作的后面插入一个LoadLoad屏障在每个volatile读操作的后面插入LoadStore屏障...

2020-11-06 23:13:13 158

原创 java并发编程的艺术-volatile的内存语义

//使用volatile声明64位的long变量 volatile long v1 = 0L; //单个volatile的写 public void set(long l) { v1 = 1; } //多个volatile的读写 public void getAndIncrement() { v1++; } //单个volatile的读 public long get() { r..

2020-11-06 00:09:57 196 5

原创 java并发编程的艺术-Java内存模型

线程之间的通信机制:共享内存和消息传递在共享内存的并发模型中,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型中,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。JAVA采用共享内存的并发模型java中,所有实例域、静态域、数组元素都存储在堆内存中,堆内存在线程之间共享。java线程之间的通信又java内存模型(JMM)控制,JMM决定了一个线程对共享变量的写入何时对另一个线程可见。线程之间的共享变量存储在主内存中,每个线程都有一个私有的

2020-11-04 23:39:45 125

原创 Java并发编程的艺术-轻量级锁+原子操作的实现原理

轻量级锁加锁:线程在执行同步块的时,JVM会先在当前线程的栈帧中创建用于存储锁记录的空间,并将对象头中的MarkWord复制到锁记录中,然后线程尝试使用CAS将对象头中的MarkWord替换为指向锁记录的指针。如果成功,当前线程获得锁,如果失败,标识其他线程争夺锁。当前线程则尝试使用自旋来获取锁。轻量级锁解锁解锁时,会使用CAS将锁记录替换回到对象头,如果成功,说明没有竞争发生,如果失败,说明存在竞争,锁就会膨胀为重量级锁。...

2020-11-03 00:35:18 124

原创 java并发编程的艺术-学习笔记(2)

java并发机制的底层实现原理java代码在编译后会变成java字节码,字节码被类加载器加载到JVM中,JVM执行字节码最终需要转换为汇编指令在cpu上运行,并发机制依赖于JVM的实现和cpu指令volatilevolatile是轻量级的synchronized,他在多任务处理中保证了共享变量的可见性。可见性就是当一个线程修改一个共享变量的时候,另一个线程能够读到这个变量的值。volatile不会引起线程上下文的切换和调度。定义: java容许线程访问共享变量,为了确保共享变量能被准确和一致的更新

2020-11-01 20:51:13 74

原创 java并发编程的艺术-学习笔记(1)

第一章-并发编程的挑战上下文切换CPU通过时间片算法来循环执行任务,当前任务执行一个时间片会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便于下次切换回这个任务时,可以再次加载这个任务的状态。从任务的保存到在加载就是一次上下文切换CPU是通过给每个线程分配cpu时间片来实现多线程的,时间片特别短,一般为几十毫秒,cpu通过不同的切换线程,让我们感觉到多线程是同时工作的。如何减少上下文切换无所并发编程:多线程竞争锁,会引起上下文切换, 所以要避免使用锁CAS算法:Java中的Atom

2020-11-01 16:58:19 70

原创 mongo-题库系统

此项目实现功能:使用mongodb存储题目信息对题目实现增删改查等基础信息其中题目实现使用UUID,作为32位的唯一标识人员系统可以通过注册中心、feign调用该系统//实现题库的增删改查 @Autowired private MongoTemplate mongoTemplate; /** * 添加题目 */ public void insertTitle(TitleEntity entity) { entity.setId

2020-10-25 15:21:04 456 1

原创 star_snnu人员存储

今天完成了人员管理系统,实现了简单的人员增删改查。其中对于热点人员(教师)的信息进行了redis缓存。这里还没有对数据库加唯一索引,也没有写参数校验的代码。后面补全。用神器knife4j进行接口测试 @Override public void insertUser(InsertUserBizRequest bizRequest) { User user = new User(); user.setUserId(UUIDUtils.getUUID());

2020-10-24 23:43:24 99

原创 学习计划-督促自己动手实践

目前构思了这些功能,想每天自己边学习边完成部分功能。基于springcloud各个组件,边学习边应用。

2020-10-22 23:29:56 121

原创 剑指offer -02 和为s的两个数字

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可//借鉴官方题解 public int[] twoSum(int[] nums, int target) { int i = 0; int j = nums.length - 1; while (i < j) { int num = nums[i] + nums[j]; if (n

2020-10-19 23:37:27 69

原创 剑指offer01-- 找出数组中重复的数字 五种解法

/** * 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 * <p> * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */publ.

2020-10-18 22:04:40 94

原创 Cannot autogenerate id of type java.lang.Integer for entity 记录mongodb 插入数据的一次错误

本身想在mongo中添加一个实体数据 @Autowired private MongoTemplate mongoTemplate; public void insert(CompanyEntity entity) { mongoTemplate.save(entity); } 实体定义public class CompanyEntity { private Integer id; }这里因为自己定义的实体属性有id,和mon

2020-10-18 00:22:54 1348

原创 神器:Knife4j ,太方便了,大爱。代替postman

在用postman做接口测试的时候,如果字段比较多,且对象比较多的时候,参数的填写就很耽误时间,Knife4j一切都为你自动生成,你只需要填写参数值就好了。简直不要太方便。<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> &l

2020-10-15 23:55:57 2478 1

原创 mybatis中执行批量删除语句,报Data truncation: Truncated incorrect DOUBLE

delete from company where com_id in <foreach collection="ids" item="ids" open="(" close=")" separator=","> com_id=#{ids} </foreach>是我自己写错了sql语句。在中,应该这样子的 delete from company where com_id in <f.

2020-10-15 00:11:23 599

原创 Redis (error) NOAUTH Authentication required粗心导致的问题

密码!!!!1密码!!!1请填写密码

2020-10-13 22:46:19 108

原创 Load balancer does not have available server for client: eureka-client 奇妙的踩坑之旅

每次重启项目后,我都知道立马去刷新页面(调用接口),就会报这个错误,看了好多好多博客的方法,添加各种配置都没用。启动注册中心和和服提供者后,稍等一下在去调用接口。就可以调用成功真的是很奇怪。可能是因为立马去调用时还不能发现注册进去的服务吧...

2020-10-11 00:35:27 1182 2

原创 Completed shut down of DiscoveryClient Eureka踩坑

启动项目发现没有注册到eureka。在pom中添加。并reload<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>完美解决问题...

2020-10-10 22:29:17 117

原创 环路检测,倒数第K个节点、整数反转-leetcode学习

给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。 public Node detectCycle(Node head){ Set<Node> set = new HashSet<>(); Node fast = head; while (fast!=null){ if (set.contains(f

2020-10-06 22:08:29 78

原创 学习Map的遍历方式

public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("zhang1", 2); map.put("zhang2", 4); map.put("zhang3", 7); map.put("zhang4", 33); map.put("zhang5", 6...

2020-10-04 22:10:01 78

原创 学习快慢指针

链表是通过指针,将一组零散的内存块串起来,不需要连续的内存地址,链表中得每个节点,都保存里下一个节点的内存地址的指针。单链表—>|data|next|—>|data|next|—>|data|next|—>null每个节点存在一个next节点,成为后续指针,next指针指向后一个节点,尾节点的next指针,指向null单向循环链表:尾节点的next节点,指向头结点双链表:在单链表的基础上,为每个节点增加一个pre节点,指向节点的前驱结点—>|data|nex.

2020-09-26 23:33:04 102

原创 java赋值问题

#mermaid-svg-eCdDTJNANHuRdsLa .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-eCdDTJNANHuRdsLa .label text{fill:#333}#mermaid-svg-eCdDTJNANHuRdsLa .node rect,#mermaid-svg-eCdDTJNANH

2020-09-22 23:47:13 261

原创 lamda经典案例-交易员、交易额、交易地

public static void main(String[] args) { Trader raoul = new Trader("Raoul", "Cambridge"); Trader mario = new Trader("Mario", "Milan"); Trader alan = new Trader("Alan", "Cambridge"); Trader brian = new Trader("Brian", "C...

2020-09-15 00:03:16 167

Java 集合面试稳稳的.pdf

java 集合面试题总结

2021-08-16

springcloud案例简单

自学springcloud。eureka feign demo。踩坑里程。多踩坑。多思考。多敲代码。加油

2020-10-11

数据结构和算法Flash动画演示.rar

数据结构和算法的动态演示,直接解压就可以使用,很形象的展示了算法和数结构,有助于理解,对自己帮助很大

2020-09-26

基于springboot的教师评价系统(带sql文件)

该系统基于Springboot的教师教学质量评价系统,系统分为管理员、教师、学生角色,功能齐全,直接导入即可使用学习

2020-09-25

springboot-crud.rar

这是一个基于SpringBoot的入门学习实例。 直接运行,导入sql文件,就可以实现增删改查功能 对于入门级学习很有用

2020-09-13

空空如也

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

TA关注的人

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