自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

云乐

acm

  • 博客(117)
  • 收藏
  • 关注

原创 快来快来理一理 JAVA Thead状态分析

Thread理一理可恶,阅读aqs的时候发现对java多线程各种操作不敏感,进度就很憋屈,这里给自己理一下。线程状态初始态就绪态运行态等待态计时等待态阻塞态终止态状态转换初始态:也就是线程刚创建的状态,对应java就是线程还没有start之前的状态,此状态在线程状态转换中存在感较低,只是个入口。就绪态:这就是已经开始执行的线程的初始状态了,在等待cpu时间片轮转到就绪态的线程,那么就会转换到运行态。运行态:字面意思,这就是冲冲冲状态。等待态:也是字面意思,线程等待了,需要被

2021-09-30 12:25:19 284 1

原创 java8 不会就out了(三)使用Optional来代替你的空判断

目标(为什么要学)java 8 新特性,早就听说了,比如在java核心原理一书上面,讲到了安全获取还是缓获取来着,用Optional作为容器来装对象,让程序从我们不受控制的报空,变成受我们控制的null处理。此次的目标是在原有的:听说过 的基础上,明白原理,知晓使用场景,融入自己的代码中。作用(能干啥)jdk文档中的描述是:optional是一个基础容器对象,用来储存可能包含也可能不包含非null值的对象。提供访问容器储存对象的方法: 如果isPresent()方法..

2021-09-15 17:20:27 1025 3

原创 【JAVA武器库】synchronized剖析(原理+锁升级流程)

synchronized原理synchronized是java提供的内置性原子锁。使用了synchronized的代码块,会在编译之后在代码块的前后加上monitorenter和monitorexit字节码指令。由于只用了monitor这个监视器,synchronized也叫监视器锁,而且由于Java中的线程和操作系统原生线程是一一对应的,1.6之前的可以认为对应操作系统的互斥量(mutex,线程被阻塞或者唤醒时时会从用户态切换到内核态,这种转换非常消耗性能。执行monitorentor会将计数器+1

2021-09-09 16:40:12 162

原创 java8 不会就out了(二)Stream流详解(使用+原理)

StreamList<String> deviceNames = deviceList .stream() .filter(x->{x.getId()<100}) .map(EnvironmentDeviceDTO::getDeviceName) .di

2021-09-09 11:06:23 329

原创 java8 不会就out了(一)lambda表达式详解(怎么用,在哪用,怎么更好的用)

java 8 不会就out了Lambdalambda知识点综述:1.lambda用来减少匿名类的复杂编写。2.lambda表达式用来实现函数式接口,函数式接口是有且只有一个抽象方法的接口,如果有多个抽象方法,或者一个抽象方法都没有,就不是函数式接口。3.编译器可以通过lambda实现的函数式接口推断出参数类型,所以可以省略定义的参数类型。4.lambda表达式对单一方法的调用,可以使用方法引用的方式,也就是 :: 隔开的类名、方法形式。5.jdk8新增的函数式接口可以很方便的支持lambda表

2021-09-09 11:02:00 221

原创 SpringCache源码简单研究

最近目标是写一个只需要本地的缓存,并且可以设置过期时间。经过了解呢,spring有自带的缓存springcache,了解了一下发现使用是挺方便的,老早之前整合redis的时候还使用过。但是未能满足业务需求的是,无法设定过期时间。那就准备自己实现一下子呢。了解到,有两个玩意,CacheManager和Cache两个ConcurrentMap,前者用来管理cache的,可以通过name获取cache,后边是保存缓存内容,通过key获取缓存值。而我的需求的过期时间细粒度并不高,相同name空间定时清空就可

2021-06-04 17:44:15 159

原创 Mysql索引(B+树)知识点,不会真的有人会被问懵吧?

首先帮大家回忆一下Myisam和innoDB的区别哈:Myisam:非聚集索引,不支持事务,只支持表级锁。InnoDB:聚集索引,支持事务,默认行级锁,支持表级锁。索引干啥的:索引就像一本词典的目录,加快查询数据的速度,但是如果更新和删除操作频繁,就会去频繁的修改这个目录,反而加大开销。索引类型:按作用分普通索引:单纯的加快查询速度。主键索引:加快查询速度,列值唯一(不能为null),每个表只能有一个主键。唯一索引:加快查询速度,列值唯一(可以为null)全文索引

2021-01-13 11:41:46 189

原创 简述BIO与NIO的概念与区别

BIO阻塞式IO,同一时间只能读或者写。虽然可以通过多线程来满足多通路,但是各个线程自身还是在阻塞的。由于BIO是面向流的,阻塞也就出现在三个地方:accept、InputStream、OutputStream。即:accept等待接受TCP请求,接收时候建一组IO流,交给另外一个线程去处理。thread thread thread | | | | | |...

2021-01-12 16:24:59 841

原创 建造者模式和桥接模式,答应我告别ifelse好吗?

建造者模式我理解的就是零件的装配,用在需要把一些有联系的属性拼接起来。如StringBuilder就是很典型的。引入一个场景,去药房抓中药,有以下组成:1、药品 (抽象零件)2、天麻、枸积、何首乌(具体零件)3、Builder组装接口 (抽象组装)4、Builder 组装实现类// 抽象零件public interface Medicine { String getName(); double getPrise(); String getDes..

2020-12-08 18:04:07 520 1

原创 你真的懂工厂模式吗?

https://www.zhihu.com/question/20367734暂时的理解就是抽象工厂模式比工厂模式牛逼,也就是沃尔玛和便利店的关系。

2020-12-08 17:05:42 112

原创 记录一下动态代理

静态代理说动态代理之前咱看看静态代理是啥吧,毕竟各个关于动态代理的文章都会提到静态代理。我理解的静态代理就是:比如我有一个类A,然后现在需要给A添加一些操作,但是又不想去修改A本来的代码,那么咱可以写一个A的代理类AProxy,在代理类中注入A的对象,再对A的操作进行维护。听上去还是挺有用的哈,但是如果使用很多很多静态代理的话,系统中的类会非常多,不便于维护。那咋办呢,所以才要有动态代理嘛。动态代理第一次听说这个词呢还是力哥给我讲项目的时候提到的,然后介绍了下在我们项目中应用的.

2020-12-07 18:21:50 102

原创 ConcurrentHashMap和HashTable小细节

内容总结于敖丙:https://mp.weixin.qq.com/s/AixdbEiXf3KfE724kg2YIw多线程下能够代替hashmap的有哪些?三种使用Collections.synchonizedMap()去把一个map类型转换成一个安全的map集合(所有操作加互斥锁) 使用hashtable 使用ConcurrentHashMap但由于前两者都是单纯的给所有操作加上锁来保证并发安全,效率并不高。咱一般使用第三种.Collections.synchonizedMap

2020-12-02 23:11:50 134 1

原创 再谈HashMap,面试不迷路!

1. 底层数据结构数组和链表(1.8之后加入红黑书)2.插入链表的方式在使用对象的hashcode和链表长度-1取余之后得到下标,对象放入对应的下标位置。如果该位置已经有值,则形成链表排列。1.7之前插入链表的方式是头插法,但如果在并发情况下可能会造成链表的死循环:比如 原数组的某条链表是 1->2,那么两个线程同时添加3的时候造成扩容,线程t1扩容数据迁移之后,这三个节点恰巧还是在同一个数组位置上,2->1->3。此时t2也开始数据迁移,处理的第一个节点还是刚加入进来

2020-11-30 22:17:24 206 2

原创 volatile关键字致命剖析

volatile关键字语义一个共享变量被volotile关键词修饰之后,就具备了以下两层语义:保证了不同线程对该变量值操作的可见性禁止jvm进行指令重排序语义1的解释:用了volatile修饰的变量值一经修改就会马上写入主存。用了volatile修饰的变量值一经修改,其他线程的工作内存中的缓存值会马上失效。用了volatile修饰的变量值工作内存中的缓存值失效了再使用新值时,会去主存中获取。以此保证可见性。语义2的解释:保证了有序性正所谓天道有缺(hhh),volatil

2020-11-24 21:58:19 118 1

原创 面试官:那接下来我们聊聊接口吧!

接口接口不是类,而是对希望符合这个接口的类的一组需求,也就是说,接口就像一种`规定`。接口中的所有方法都自动是public方法,因此在接口中申明方法时,可以不用加上public字段。(java9之后可以用private,但没啥用,必须实现,只能用于给接口中的其他实现提供辅助)但是要注意的是,接口中,千万不能有实例字段。(java8之后可以实现方法了,但是一直都不能有实列字段)接口的属性可以声明接口的变量,但是接口变量的引用必须是实现了这个接口的类对象。接口可以被拓展,从通用性较高的接口拓展到专

2020-10-10 15:08:34 153

原创 注解与反射

之前在读源码的时候由于java的基础知识实在太拉闸,所以暂时放弃源码阅读任务,既然基础差那就学基础呗,所以学了注解和反射机制。首先是注解Annotation注解,顾名思义啊,和注释有点类似,但是注解是给代码看的,不是给人看的,作用是对程序做出解释,可以被其他程序读取(比如用反射来操作注解),内置注解java自带的注解:Deprecated (常用)用于过时的类、方法、成员变量等Override(常用)覆盖父类方法SuppressWarning(常用)阻止警告,用来抑制编译时

2020-06-09 17:19:46 115

原创 HashMap学习笔记

一个有梦想的算法,把线性查询O(n)的复杂度想缩小到O(1)把任意长度转换为固定输出最底层的数据结构是数组,通过hash算法取模,然后再用寻址算法找到唯一的位置。hash算法和寻址算法二进制位运算优化hash算法优化hashcode就是不同对象拥有的唯一的散列码,在hashmap里面,使用了hash算法对hashcode进行了进一步的优化:对key的hash值和它自己右移十六位之后进行异或操作这样保证了hashcode的低十六位同时保留了高十六位的特征,使后边寻址算法的时候高十六位和低十六位

2020-06-09 17:19:05 135

原创 Mybatis原码学习(五)还是反射工具箱

对于反射工具箱,前面学习了Reflector还有类型解析TypeParameterResolver,都是不咋好理解的,今天接着来点思维简单点的。ObjectFactory这是用来创建实体对象的接口。代码如下:public interface ObjectFactory { //设置配置信息 void setProperties(Properties properties); //通过无参构造器创建实体对象 <T> T create(Class<T> type);

2020-06-02 18:53:51 325 2

原创 Mybatis原码学习(四)TypeParameterResolver

得先申明下,这篇文章应该不会有借鉴价值,我也只能是斗胆总结下。为什么呢,因为这是我目前为止遇到问题最大的一部分,绕过去绕过来,可能是自己对泛型、类型学习都还不够,理解得很吃力很吃力。代码部分来自博客:https://www.jianshu.com/p/73bb429b9a01我实在懒得打注释了,解释就用文章的方式吧。在开始介绍TypeParmeterResolver之前,得了解一下Type的知识:Type是所有类型的父接口,它有四个子接口和一个实现类。下面来看这些子接口和子类所代表的类型。C

2020-06-01 19:15:48 441

原创 Mybatis原码学习(三)Reflector

相对于java自带的反射功能,Mybatis封装了更适合本身的反射工具箱,提供了更简洁的APIReflectorReflector是Mybatis中反射模块的基础,每个Reflector对象都对应了一个类下面是Reflector类中的各个字段://对应的class类型 private Class<?> type; //对应的getter方法的属性 private String[] readablePropertyNames = EMPTY_STRING_ARRAY; //

2020-05-31 19:12:23 222

原创 SpringBoot项目Jar包方式部署到云服务器

难顶,之前部署ssm项目的时候没碰到什么困难,结果整这个网站的时候直接给我整自闭了。首先是对项目进行打包,有两种方式,jar和war。区别呢是war包不能使用springboot自带的tomcat,得在依赖中把内嵌的tomcat关掉,然后打包,传到服务器再把war包放到tomcat的webapps下面自动解析。我尝试了几遍,很拉闸,然后放弃了。我用的是jar包的方式。首先在pom中添加(在build里面)<resources> <resource>

2020-05-30 15:08:50 426

原创 Mybatis原码学习(二)基础支持层:解析器模块

在Mybatis中设计到多个xml文件,就得接触到xml解析的内容。xml解析常见的方式有三种,DOM,SAX,StAXDOM:树型结构,搜索快,添加修改也快,找自己的关系节点也快,但是呢在运行的时候需要把整个XML文档放入内存当中,搭建树形结构,所以如果xml中的数据量比较大,就会造成较大的资源浪费。SAX:流式处理,只将一部分xml文档加载到内存中,资源占用较小,而且程序处理模式就像深搜一样,达成自己的目的就立即退出,不必解析剩余的。解析节点的时候出发节点上面的回调函数,回调函数是由开发人员

2020-05-28 17:49:25 136

原创 Springboot正常启动,但是访问404的坑

!!!!!!!找了两天的bug,从找依赖,到找版本,直接整吐,结果是因为我自己的启动类Application和controller没在一个包下面!!!!原因是:SpringBoot 注解 @SpringBootApplication 默认扫描当前类的同包以及子包下的类我是真吐了,记录一下。...

2020-05-02 16:36:58 1532

原创 Shiro整合springboot(登录认证和加密)

参考博客:https://blog.csdn.net/bicheng4769/article/details/86668209?ops_request_misc=&request_id=&biz_id=102&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0今...

2020-05-01 16:20:39 334

原创 剑指offer 按之字形打印二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。最开始想用一个queue,因为一层一层的打印,这不就是bfs吗,然后写好了一分析就处问题了,比如某一层从左往右放,那么他的下一层只能局部的从右往左,因为queue的先进先出限制了顺序。然后发现用两个stack可以解决这个问题。如果我这一层从左...

2020-04-29 14:18:06 91

原创 剑指offer 删除链表中的重复节点(如果链表是无序的情况)

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5我是真的傻了,写了大半天想了大半天,牛客上面又不让运行,节点到处指,好不容易过了,结果一看别人代码那么简单, 咋回事,原来给的链表是排好了序的,不是我想的乱序的...

2020-04-28 18:30:02 118

原创 剑指offer 表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。这题用ifelse去挨个判断情况也能做出来,但是我看题解别人挺多使用正则表达式的,正好之前学爬虫学过,这里试试java的正则匹配:用的是S...

2020-04-28 14:04:25 84

原创 剑指offer 数组中的逆序对(归并)

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%1...

2020-04-24 16:21:52 114

原创 剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。题目很熟悉,统计一个整数n他的 从1到n中出现1的次数,应该是以前打acm的...

2020-04-24 15:59:04 92

原创 剑指offer 复杂链表的赋值(Arraylist解决)

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)链接:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba?toCommentI...

2020-04-22 14:45:44 116

原创 剑指offer 反转链表

题目:输入一个链表,反转链表后,输出新链表的表头。我的办法属实写得笨,找到原链表总长度,然后锁定位置到最后一个节点,把这个节点作为新链表表头,然后再逆序的从原链表拿出节点,接在新链表上面,最后别忘了新链表的最后一个节点next=null。/*public class ListNode { int val; ListNode next = null; ...

2020-04-20 14:25:00 95

原创 剑指offer 重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:果然数据结构是有点硬伤啊。。写了好几个小时思路就是,用前序遍历来确定节点,用中序来确定左右。自己定义两个数组,一个数组存当前节...

2020-04-17 21:08:14 102

原创 Vue.js学习笔记

什么是 Vue?考虑这个需求: 我们要把一个 json对象的数据,显示到一个元素上去。如果我们使用之前的JS,那么就需要先用getElement获取元素,然后在innerHTML显示数据但是如果使用Vue的话,就只需要提供数据,然后把数据绑定到元素的id就可以啦!比如这样一个把数据显示到div的例子:<script src="C:/Users/msi-/Desktop/w...

2020-04-16 19:25:36 285

原创 Thymeleaf学习笔记

thymeleaf 跟 JSP 一样,就是运行之后,就得到纯 HTML了。 区别在与,不运行之前, thymeleaf 也是 纯 html ...所以 thymeleaf 不需要 服务端的支持,就能够被以 html 的方式打开,这样就方便前端人员独立设计与调试, jsp 就不行了, 不启动服务器 jsp 都没法运行出结果来。还特地搜了下thymeleaf怎么读哈哈首先在spring...

2020-04-14 17:44:11 260

原创 在Springboot里面使用redis缓存

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。换句话说,Redis就像是一个HashMap,不过不是在JVM中运行,而是以一个独立进程的形式运行。一般说来,会被当作缓存使用。 因为它比数据库(mysql)快,所以常用的数据,可以考虑放在这里,这样就提高了性能。是单线程的而且贼快, 操作是原子操作,下...

2020-04-11 16:26:57 283

原创 SpringBoot学习笔记(一)基础,JPA

前两天写完了天猫商城的ssm项目,部署到了阿里云上面http://120.26.185.107:8080/tmall_ssm然后就萌生了个想法,自己写一个个人博客,想了想还是把Springboot学完了之后再动手试试。那么开始springboot吧。在IDEA里面创建Springboot项目首先,在IDEA中开发Springboot应用和Eclipse里面一样,本质上都是...

2020-04-09 17:50:10 508

原创 Idea 更改css文件,前端内容没反应解决方法

今天下午对付了一个小时的问题,记录一下。清空一下浏览器缓存就行了。

2020-04-04 17:35:40 2609

原创 ssm项目运行流程

这两天开始写ssm项目了,具体的配置在上一个ssm博客写过啦。这里帮自己记录一下ssm项目的运行流程,方便之后复习。比如首先,我们在浏览器上面输入url对应 分类list (admin_category_list)那么这时候 由于咱在web.xml中配置好了把所有的访问全都拦截给DispatcherServlet处理:web.xml:DispatcherServl...

2020-03-26 16:15:58 7403 4

原创 Maven idea配置

Maven 是专门用于构建和管理Java相关项目的工具。Maven在犹太人使用的国际与里面是专家的意思,如果你会用Maven你就是专家了哈哈,站长的笑话。Maven是用来管理java项目的。Maven的主要用处1:使用Maven管理的Java 项目都有着相同的项目结构1. 有一个pom.xml 用于维护当前项目都用了哪些jar包2. 所有的java代码都放在 src/mai...

2020-03-24 17:30:47 409

原创 Intellij IDEA 详细安装配置流程

首先在官网去下载Ultimate版本的,这个版本对j2ee支持https://www.jetbrains.com/idea/download/#section=windows安装激活Intellij Idea 新建java项目如果电脑上有旧版本,要删除掉IDEA和其他的IDE有所不同,它刚开始启动都有许多配置需要做第一个选项就导入旧的配置,咱新安装就选第二个...

2020-03-24 16:42:50 2362

空空如也

空空如也

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

TA关注的人

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