自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 CAS比较并替换

CAS操作单个共享变量的时候可以保证原子的操作,多个变量就不行了,JDK 5之后 AtomicReference可以用来保证对象之间的原子性,就可以把多个对象放入CAS中操作。使用CAS以后,读取数据的时候用一个标志位记录原来的数据,操作完写回去时需要需要对比标志位数是都和内存最新值是否相同相同则写回,不相同则失效,需要重新读取。并发环境下,假设初始条件是A,去修改数据时,发现是A就会执行修改。不再使用标志位,而是使用版本号,每次对比版本号,对比修改成功后版本号+1。能发生了A变B,B又变回A的情况。

2022-10-11 22:27:44 261 1

原创 volatile

轻量级,适用于一个线程写,其他线程读,可以保证读的安全性。

2022-10-11 22:26:02 361

原创 final

2)final修饰的变量是引用类型时:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以改变的。答:因为模板方法是给子类直接使用的,不是让子类重写的,一旦子类重写了模板方法就失效了。3)修饰变量:表示该变量第一次赋值后,不能再被复制(有且仅能被复制一次)1)final修饰的变量是基本类型时,变量存储的数据值不能发生改变。当我们改变他里面的数据时,是可以的,需修改后地址也不会放生改变。final关键字的意思是最终,可以修饰(方法,变量,类)2)修饰方法:白哦是该方法是最终方法,不能被重写。

2022-10-10 22:00:00 327

原创 synchronized

synchronized可以锁在方法上也可以锁在代码块上对非静态的方法加锁时,锁的是对象,称为对象锁。对静态的方法加锁时,称为类锁。

2022-10-10 10:24:13 157

原创 【集合】--Set

HashSet(无序,唯一): 基于HashMap实现的,底层采用HashMap来保存元素,线程不安全}是HashSet的子类,并且其内部是通过来实现的,能够按照添加元素的顺序进行遍历TreeSet(有序,唯一,不允许为null):底层实际上是一个TreeMap实例,底层使用红黑树(自平衡的排序二叉树),能够按照添加元素的顺序进行遍历。TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。

2022-10-09 22:52:34 138

原创 【集合】--List

ArrayList:加粗样式底层数据结构是数组,Object[ ],查询快,增删慢,线程不安全,效率高,扩容方式:当前容量×1.5LinkedList:底层数据结构是双向链表,查询慢,增删快,线程不安全,效率高,无需扩容因为底层是链表实现的(JDK1.6 之前为循环链表,JDK1.7 取消了循环。)Vector:(已弃用)底层数据结构是数组带synchronized的ArrayList,查询快,增删慢,线程安全,效率低,扩容方式:当前容量的1倍改查选择 ArrayList;

2022-10-09 09:36:01 110

原创 Typora展开大纲

在大纲里别的的目录可以按分类展开有菜单栏模式,我的怎么就是都显示呢,该怎么设置呢。

2022-08-28 10:16:30 270

原创 三次握手四次挥手

因为是双方彼此都建立了连接,因此双方都要释放自己的连接,A向B发出一个释放连接请求,他要释放链接表明不再向B发送数据了,此时B收到了A发送的释放链接请求之后,给A发送一个确认,A不能再向B发送数据了,它处于FIN-WAIT-2的状态,但是此时B还可以向A进行数据的传送。主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了。主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.。

2022-08-23 10:03:46 59

原创 MySQL

MySQL数据库大汇总

2022-08-22 17:22:13 377

原创 图片验证码

服务器从本地生成图片,从图片上生成一些字,同时记录在session域内,前端页面通过路径获取,然后src显示图片。登录时带上验证码,不然无法登录。发送时需要携带图片上的信息。验证码匹配完以后对数据库进行操作,服务器需要删除验证码,防止下次匹配。匹配不成功不对数据库进行操作。...

2022-07-29 21:58:28 509

原创 数据结构--基数排序

1)首先将数据按各位分别放在0、1、2、3、4、5、6、7、8、9下面然后从零上侧取出2)然后按照十位再次在0、1、2、3、4、5、6、7、8、9下面进行排序然后从0侧取出3)然后依次向更高位进行。以下面数据为例,展示基数排序过程。1)首先建立一个二维数组,存储各个位数对应的数字2)然后建立一个以为数组,用于存储每一个数组对应存储数个数3)再然后求出最大值,求取需要循环几次往对应数下面放4)再然后进入循环开始每一轮5)每一轮,首先循环判断数字应该放在那个对应下面,然后存放到二维数组其次,

2022-07-12 21:03:17 423 1

原创 数据结构--堆排序

1)先构建大根堆a、从下向上维护,判断左孩子是否存在,b、存在再判断右孩子是否存在,c、如果不存在,不做变化d、如果存在,左孩子++(也就是右孩子)e、判断左孩子与父大小,判断是否交换2)堆顶堆底互换将最大的交换到堆底位置,确定一个最大值3)再次维护大根堆从堆顶维护每次长度-确定好的位数...

2022-07-12 20:39:28 119

原创 数据结构--快速排序

首先选取一个数为基准数,然后以此基准数为标准其次比基准数小的放到基准数左侧,比基准数大的放大基准数右侧。最后将数组以基准数分为左右两个数组,再递归调上面过程。快速排序的优化修改基准数的选取,不再选取最左侧为基准。例如平均数、中位数等可以优化算法。性能最后八个排序总结一篇哦!...

2022-07-12 20:06:27 238

原创 最容易理解的有序二叉树、平衡二叉树、红黑树

左边节点值小于父节点值,右边的节点值大于父节点值。查询一个数时,时间复杂度在O(lgn)—O(n)之间,不稳定。使用平衡二叉树。在有序二叉树的基础上,要求左右子树的高度差的绝对值不能超过1进行调整,没事走两步。以LL为例,从造成不平衡节点的最近的不平衡节点3节点向造成不平衡的节点走,3–>2(L)–>1(L)1)LL2)RR3)RL4)LR构造树时有大量旋转,过于复杂,耗费性能。解决:红黑树既要稳定,又要计算机性能耗费不高,还要一个O(logn)2-3-4树,只有这几种情况。2节点黑节

2022-07-09 12:01:40 219

原创 线程池(一)

线程池是一种多线程处理方式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务,给每个线程每次分配一个任务。可以避免多线程每次任务结束线程进行销毁,再有新的任务新创建线程,代价极大。在线程中写一个死循环就可以一直存活,但一直占用cpu和空间。1)corePoolSize(核心线程数),处于运行态的线程数,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;核心数没满,即使任务执行完也是打空转,来新的任务后,会继续创

2022-06-17 21:28:57 160

原创 Mybatis第一课之简介

1)是一个持久层框架2)避免了所有JDBC代码和手动设置参数以及获取结果集3)可以使用简单的XML或注解来配置和映射原生类型、接口和java的POJO(普通老式java对象)为数据库中的记录4)是apache的一个开源项目iBatis,后迁移到谷歌,改名为Mybatis,2013年11月迁移到Github1)持久化就是将程序的数据在持久状态和瞬时状态转化的过程。2)为什么要持久化?​ a)有一些对象不能丢掉,需要持久化存储起来​ b)内存太贵了Dao层,Service层,Controller层…1)完成持久

2022-06-14 20:49:04 66

原创 并发的艺术第一课

1)上下文切换是指线程间的切换2)如何减少上下文切换?a、使用最少线程b、使用协程,在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换c、无锁并发编程d、CAS算法3)多线程一定快吗?不一定单核情况下,没有cpu浪费情况下,单线程最快。切换1-2ms多核情况下,多线程比单线程快。切换不到1ms4)性能分析工具Lmbench31)锁:加锁后,别的线程不可以再访问,释放后,其他的线程才可以访问。(加锁加的是引用类型)2)死锁:互相等待对方释放资源3)如何避免死锁?a、避免一个线程同事获取多个锁b、避免

2022-06-07 11:06:36 78

原创 关了资源管理器电脑白屏解决办法

打开了任务管理器,感觉cpu占比有点高,误关了Windows 资源管理器,电脑白屏了···头疼解决办法1、同时按下键盘:"Ctrl+Alt+delete"组合键2、点击任务管理器3、点击右上角文件–运行新任务4、输入explorer.exe就解决啦...

2022-04-21 15:15:31 4865 8

原创 力扣题之泰波那契序列 Tn

题目描述泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。递归解法class Solution { public int tribonacci(int n) { if(n==0){ return 0; }else if(n==1){ return 1

2022-04-20 22:51:02 276

原创 MyBatis入门

第一章:框架的概述1. MyBatis框架的概述1. MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。2. MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果以Java对象返回。3. 采用了半个ORM的思想。hibernate 完全的ORM思

2022-04-20 22:08:51 85 2

原创 ssm分层架构

1、首先应该知道什么是maven简单来说,可以说maven是一个项目管理工具,用maven管理项目。maven把项目开发和管理映射成对象模型的一种形式。2、ssm分层架构为什么要分层?

2022-04-19 23:23:19 1227

原创 Servlet对数据库进行增删改查

1、数据库建表首先在数据库建立一个数据库,现在我的数据库叫做baiwang2、在类中加入url、用户名、密码private static String url = "jdbc:mysql://localhost:3306/baiwang";//3306是数据库端口号private static String user = "root";private static String password = "2020";//数据库端口号3、实现增删改查1)加载驱动Class.forName("c

2022-04-19 19:16:35 2585

原创 idea向mysql上传中文信息乱码问号问题

idea向mysql上传中文信息乱码??问题对于这个问题我还是进行了一些尝试,我下面一一列举以下。1、File–Setting–Editor–File Encodings按照上面路径将编码设置为UTF-8我确实改成了这样,但是没有对齐问题起到太大作用,不过后面我也没改回来,不知道改回来会不会再次报错(有点不想尝试了,秉持能用就行的原则了)2、查看mysql路径下的my.ini里面的编码default-character-set=utf8character-set-server=utf8

2022-04-19 10:46:23 2360 1

原创 cannot resolve symbol 问题

cannot resolve symbol 问题起因电脑打开idea总是蓝屏,所以新下载了其他版本idea,将原来maven项目导入idea后显示此问题1、file–Invalidate Cache/Restart–Invalidate and Restart首先尝试了 file–Invalidate Cache/Restart–Invalidate and Restart 清除缓存,当然没啥用,不过你的不排除是这个问题啊,可以尝试一下。2、 File - Project Structure - P

2022-04-19 10:30:11 14540 4

原创 消息队列详解

什么是消息A向B发送信息,发送的信息就叫做消息什么是队列存放消息的队列。消息队列Message Query(MQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。mq做的就是在这些协议上构建一个简单协议——生产者、消费者模型,mq

2022-04-08 18:46:00 161

原创 kafka的安装

第一步将压缩包上传到shell上rz如果出现乱码可以使用rz -e或者rz -be 或者rz -bey尝试一下第二步解压tar -xzvf第三步在解压的同目录下创建一个kafka-logsmkdir kafka-logs进入文件下,进入config目录下进行配置vim server.propertieslisteners = PLAINTEXT://服务器内网ip:9092log.dirs=kafka-logs的路径zookeeper.connect=公网ip:2181进入bin目

2022-04-05 16:55:05 1475

原创 idea实现对Zookeeper的增删改查

Zookeeper的增删改查

2022-04-05 16:27:42 1518

原创 Zookeeper的安装

1、第一步将压缩包传到shell上rz如果出现乱码问题,可以尝试rz -e或者rz -be又或者rz -bey2、解压文件夹tar -xvf apache-zookeeper-3.6.3-bin.tar.gz 3、解压后进入文件,创建data文件mkdir data4、进入conf目录下,复制一份z开头的文件cp zoo_sample.cfg zoo.cfg进入zoo.cfg下进行编辑日志vim zoo.cfg修改配置文件,dataDir改为刚才创建的data目录5、退出co

2022-04-05 15:58:28 1637

原创 java大数值

为什么要有大数值呢?如果基本的整数和浮点数精度不能满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal,这两个类可以处理包含任意长度数字序列的数值。BigInteger实现了任意精度的整数运算,BigDecimal实现类任意精度的浮点数运算。常用方法1、如何将普通数值转换为大数值?BigInteger a = BigInteger.valueOf(1324581); //数据很大就会报错,超出int范围System.out.println(a)

2022-04-01 09:58:41 564

原创 字符串知识小汇总

子串String类的substring方法可以从一个较大的字符串提取出一个子串。String greeting = "Hello";String s = greeting.substring(0,3);System.out.println(s);运行结果拼接java语言允许使用+进行拼接String a ="str";String b = "abc";String c = a+b+"ccc"+12;System.out.println(c);运行结果:不可变字符Strin

2022-04-01 00:11:53 422

原创 java的四种循环

while循环while(判断条件){循环语句;}int a = 6;while(a<10){a++;}//先判断再进入循环do while循环do{循环语句}while(判断条件);int a = 6;do{a++;}while(a<10);//先进入循环再进行判断for循环for(int i = 0;i<10;i++){System.out.println(i);}for each循环for(变量类型 变量名:数组名){ 循环输

2022-03-30 20:38:56 981

原创 面向对象的三大特征

面向对象的三大特征封装、继承、多态1、封装封装:就是将数据和函数集合在一个类当中,类似于c的结构体。封装把一个对象私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们可以不提供方法给外界访问,不过,如果一个类没有提供给外界访问的方法,那么这个类就没什么意义了。为什么要用封装?2、继承3、多态...

2022-03-24 08:20:29 73

原创 java的特点

java语言的特点1)简单性java在设计时是尽可能接近C++,以便系统更易于理解。java剔除了C++中许多很少使用、难以理解、易混淆的特性。Java是C++语法的一个“纯净”版本。2)面向对象面向对象易维护、易复用、易扩展。因为面向对象有封装、继承、多态性(后面会详细介绍这三个特点哦!)的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是面向对象性能比面向过程低。3)分布式分布式系统由多个节点组成的系统,节点是指计算机服务器,这些节点一般是孤立的,而是互通的。4)健壮性

2022-03-22 10:34:41 2879

原创 数据结构之插入排序

插入排序思想:首先选第一个认为第一个是排好的,人后第二个与第一个对比(小的放在前面,大的放在后面),前两个排成有序,然后第三个再对前两个有序的进行插入,然后依次进行到最后一个数。代码:public static void insertSort(int[] arr) { for(int i = 1;i<arr.length;i++) { for(int j = i-1;j>=0;j--) { if(arr[j]>arr[i]) {

2022-03-21 18:41:59 611

原创 数据结构冒泡排序

冒泡排序思想:第一轮遍历:第一个与第二个对比,如果第一个大于第二个数则交换否则不交换第二个再与第三个对比,如果第二个大于第三个则交换否则不交换重复上面步骤,直至最后一个,保证最后一个数据最大。第二轮遍历:重复第一轮遍历步骤,直至倒数第二个数据,保证最后一个最大,倒数第二个数次之。...重复上述步骤,直至遍历到保证第二个数大于第一个。代码public static void bubbleSort(int[] arr) { for(int j = 1;j<arr.len

2022-03-20 16:19:12 787

原创 数组的删除、插入、查询

数组的插入我们应该都知道,数组一经建立就不可以再改变大小,那我们怎么对数组进行插入呢?首先记录数组中有效位数,有效位数与数组长度进行对比,如果数组还有空余,则进行直接插入,如果没有没有,则再申请一块更大的空间,建立一个比原有数组长度更大的数组,将原有数组中的数据拷贝过去。那如果是不在最后位置插入呢,则需要先将指定位置及后面的数据向后移动,再将待插入数据进行插入。代码:public static void main(String[] args) { int count=8; in

2022-03-20 16:04:20 894

原创 数组(一)

一维数组1.什么是数组?数组的特点1)定义:数组是一种数据结构,用来存储同一类型值的集合。2)特点:数组一经创建,就不可以改变数组的大小;数组下标从0开始;每个数组元素都有默认值,基本类型为0,false,引用类型为null。2.数组的声明//声明数组aint[] a;int a[];//一般用上面这种3.数组的创建int[] a = new int[10];//创建一个长度为100的数组aint[] a = new int[]{1,2,3,4,5,6,7,8,9};//创建

2022-02-12 20:36:58 331

原创 数据结构归并排序

归并排序什么是归并排序呢?归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。定义显然不是那么通俗易懂,那么举个例子来说明吧。首先给出将要排序的数字第一步(将每一个数看做一组)第二步(两两归并,归并后的两个数看为一组)第三步(再将两组归并)第四步(再将两组归并)第五步(也是最后一步啦)上面是一个简单地归并例子就排序好啦!··················

2022-01-22 20:47:33 440

原创 数据结构快速排序

快速排序快速排序是常用到的排序,我们以下面13个数为例去说明快速派序。1+2+4+8+16+……+2(k-1)=2k-1 =>k=log n每一趟的排序时间为O(n)故快速排序的时间复杂度为O(nlogn)

2022-01-22 20:11:39 287 1

原创 基础的linux命令(一)

常见的linux指令(一)1、 ls :查看文件内容2、 cd / :根目录3、 ls -l(ll) :目录详情4、 ls -a :查看隐藏目录5、 cd 目录名称 :进入此目录下(cd 目录名称/目录下的目录 :直接进入二级目录)例:cd etc :进入etc文件cd etc/abrt :直接进入etc下的abrt文件6、 cd …/ :回到上一级目录 (…/可连用哦)例如: cd …/…/7、 将windows系统中

2022-01-20 22:51:29 618

空空如也

空空如也

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

TA关注的人

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