自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 离线部署欧拉系统OpenEuler20.03 LSP3 所需要的依赖,思路通用于各个Linux系统,看这一篇就够了

所以构建出合适的环境后,可以先行使用上面的命令把对应的依赖包先下载下来,再去测试能不能安的上,防止本地安好了,还没下包,reinstall又下不全。上面那条命令会把本系统中你要安装的包没有的依赖全部找出来,(所以要求本地创造的虚拟机要和无网环境一样),出现相应的包后 y回车 同意即可全部下载。本地虚拟机装一个一模一样的环境,避免去公司申请的时间或者没有相同环境的服务器出现,本地有了相同的环境一切都好说。推荐一个我使用的命令,按照我查询的方法是有几种的,但是我选择一种,且这一种比较好用。

2023-09-19 14:44:19 2789

原创 VMware和windows互传文件

安装好了之后下面会弹窗提示安装成功,这个时候,找到虚拟机设置,打开上面第二个选项卡选项,里面有一个共享文件夹的,点进去,右边启动,然后选择主机的一个文件夹。然后下面会出现一个提示,并且重复刚才的操作会发现变成了重新安装VMware tool工具。打开虚拟机,创造好的虚拟机,选择选项卡虚拟机,选择安装VMware tool工具,根据我的经验,重启一下虚拟机。然后再去window找对应的文件夹,右键属性,选择共享,共享给所有。就会发现你的文件夹在这里了,成功完成了共享。进入之后发现了又对应的压缩包。

2023-09-19 14:38:57 652

原创 那些配置服务器踩的坑

踩坑撞墙笔记

2023-09-14 11:04:49 467

原创 后端思维----并行优化性能

后端优化思维,并行的艺术

2023-09-06 16:53:46 300

原创 Redis----布隆过滤器

粗略的理解为一个不怎么精确的set,当用它自带的contains方法判断某个对象是否存在的时候,得到的结果可能是假的,他会误判,就是说如果他说有,这个对象可能不存在,但是如果他说没有,一定是没有的。这样的准确度其实已经非常不错了。基于上面的背景,它很好的可以做到推送没有见过的内容,但也有一小部分已经被过滤(没看过),因为产生了误判,它以为有这个值,所以这样的话以一点点的代价实现了用户不会看到已经看过的内容。

2023-09-05 11:21:28 1077

原创 Redis --- 位图

开发过程中,会有布尔类型的存储,比如记录一个用户一年365天的签到情况,如果每天都要有一个布尔变量,多个用户,亦或者使用k-v形式,上亿用户的话这个存储量是惊人的。它并不是一种类似于队列等的特殊的数据结构,内容其实就是普通的字符串,按二进制位数来说,也是就byte数组,可以使用,get,set索引来直接获取或者设置整个位图的内容。后面参数[start, end] 但是这两个参数都是以8字节位单位的,也就是说,0, 1是指第一个开始第二个字节结束,范围实际上是前十六位。# 从第二个字符算起,第一个 1 位。

2023-09-04 14:33:49 634

原创 Redis----取代RabbitMq 和 Kafka的解决方案

redis中一种特殊的数据结构,zset,消息序列化成一个字符串作为zset的value,消息的到期时间作为他们的score,用多个线程轮询zset获取到期的任务处理。(多个线程保证可用,一个线程挂了还有其他的)已知rabbitmq和kafka作为消息中间件来给程序之间增加异步消息传递功能,这两个中间件都是专业的,功能也很强,但是有的时候过于复杂,对于只有一组消费者的消息队列,使用Redis 就可以轻松搞定。读者可以思考一下他的几种数据结构哪种更适合,string,hash,set,zset,list。

2023-09-01 10:35:10 1823

原创 Redis之分布式锁

分布式应用中,经常会遇到并发问题。(原子操作是不会被线程调度机制所打断的的操作,一旦开始就会执行到最后,要么做要么不做,不会被打断),分布式锁应运而生。所以流程是先占格子做事情再释放,如果事情做到一半出现异常了,那么是不是就是del不了了,就会一直占用,成为所谓的死锁。我们可以在占格子的时候设置一个定时,如果超过这个时间事情还没做完(异常),会自动释放,那么就解决了可能会出现死锁的问题。我们是先setnx设置锁,expire设置过期时间,看起来天衣无缝,但是如果这两条命令之间出现问题了怎么办。

2023-09-01 09:42:20 924

原创 微服务初始

今天准备开始学习微服务,使用微服务肯定是因为他有好处。首先了解到的三种架构,传统单体,集群架构,微服务架构。

2023-07-21 11:02:48 339

原创 DevOps初识

博主入职了,正在学习一些在学校没有接触过的东西,在此进行记录~~~~

2023-07-20 16:43:02 181

转载 java 导出复杂格式的 Excel 多级表头

java 导出复杂格式的 Excel 多级表头

2022-09-30 11:19:59 607

原创 java 类 写入excel

【代码】java 类 写入excel。

2022-09-22 11:45:55 434

原创 多线程实现的交替打印的多种实现形式

多线程实现的交替打印的多种实现形式。说白了就是使用java‘中的各种同步器实现这个交替打印的需求。sync的实现方式package com.AQS.JiaoTiDaYin;/** * @Author:XK * @Date: Created in 12:00 2022/4/20 * @Description:多线程交替打印的多种实现方法 (sync) **/public class JiaotiDayinSync { private static int counter=0;

2022-04-20 14:54:07 470

原创 Mybatis 源 码 初 解 析 (三) 完

紧着着上文提到的,要来寻找第三部分,sql语句究竟是怎么执行的。在此之前我要先弄清楚一些问题。在构造sqlseesion的时候我们清楚的记得穿进去几个参数,包括executor,configuration,autocommit等的。关于executor,要进行一下剖析,这个东西。执行器。点开Executorpublic interface Executor { ResultHandler NO_RESULT_HANDLER = null; int update(MappedStatem

2022-04-05 16:06:28 807

原创 Mybatis 源 码 初 解 析 (二)

言接上篇,我说过的我认为的三部分数据源sql语句执行sql语句上篇验证了数据源的一个连接,接下来就需要探究sql语句究竟是如何获得的。熟悉mybatis的都知道sql的映射有两种方式,第一种是通过注解,第二种是通过xml文件。实际上xml用的比较多,而且mybatis官方提倡使用xml文件关于xml里的映射就是通过一个命名空间的绑定,通过全限名来进行一个绑定。类似于一个接口和接口的实现,然后注释就是在注释上进行一个接口的实现。两种是类似的。但是我所说的如何获得sql语句是只框架本身。我们

2022-04-04 17:55:45 464

原创 Mybatis 源 码 初 解 析 (一)

搁置了好久的mybatis源码攻略,今天来一丢丢小小的总结。阅读源码吗,我觉得要从宏观到微观的一个顺序去进行。有必要的话甚至可以加上自己的一个图解流程,可以使思路更加清晰。初想mybatis首先mybatis是一个为了简化操作的一个框架然后它的存在代替了jdbc连接 那么它里面一定包括着连接数据库的基本操作关于jdbc的操作package jdbc;import java.sql.*;/** * @Author:XK * @Date: Created in 17:48 2021/1

2022-04-04 17:16:15 1124

原创 java并发----并发机制的底层实现原理

主要包括Sync,原子类,lock类。还有volatile 但是并不算是限制同步的操作。volatile轻量级的synchronized,保证了共享变量的可见性。可见性的意思是当一个线程修改了共享变量,另一个线程可以读到这个修改值。执行成本低于sync,因为不会引起上下文的切换。、Synchronized元老级的锁。java的每个对象都可以作为锁。对于普通同步方法,锁是当前实例。 对于静态同步方法,锁的是类的class对象 对于同步方法块,锁的是关键字括号里的代码锁的升级1

2022-03-02 15:40:39 211

原创 java并发----初识+并发编程引起的挑战

为了让程序运行的更快,引入多线程。并不是启用更多的线程就会提高程序的运行速度。并发编程会有很多挑战。比如上下文切换,死锁问题。上下文切换cpu是通过时间片流转的方式分配线程完成任务。当一个时间片完成之后,会切换到另一个线程的任务,此时就需要保存刚刚未完成的任务的环境等,操作系统的知识 该东西被存在pcb中 ,以便在切回这个线程时可以继续,这个过程被称为上下文切换。上下文如何切换,便是一个多线程可以高效完成任务的关键。多线程不一定比单线程快的,并发累计操作不超过百万时,比串行慢。原因就是上下文

2022-03-02 14:18:17 287

原创 代理模式---动态代理--cglib

上次说到,cglib是基于类的动态代理。因为jdk代理是基于接口,有局限性,如果一个类没有继承接口也想实现动态代理的话,必须就要借助于cglib动态代理了。与JDK代理相比较,cglib的原理是创造一个子类重写父类(要被代理的对象)的方法。cglib的流程真实角色:要被代理的对象代理角色:生成代理类(要继承cglib包里的MethodInterceptor接口) 方法拦截器public interface MethodInterceptor extends Callback {

2022-02-19 18:23:14 427

转载 Spring -- Spring boot Spring mvc 的区别

spring boot与spring mvc的区别是什么? - 知乎如题https://www.zhihu.com/question/64671972作者:潜龙勿用链接:https://www.zhihu.com/question/64671972/answer/223383505来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的 ioc和.

2022-02-19 17:11:52 151

原创 代理模式--动态代理--jdk代理

动态代理jdk代理--基于接口代理cglib--基于类代理javassist --基于字节码一个jdk动态代理类代理的是一个接口,一般归属于一个业务。在不改动源代码的同时可以很方便的低成本的进行加工附属改造。jdk代理主要是通过java.lang.reflect 包中的 Proxy类 和 InvacationHandler接口,实现的。首先看下这两个类的源码。InvacationHandler interfacepublic interface InvocationHandle

2022-02-19 16:31:52 546

原创 代理模式--静态代理

明确AOP之前首先要对代理模式进行深刻的学习。代理模式分为静态代理 和动态代理。 动态代理又包括JDK代理和Cglib本文主要学习静态代理。代理模式从生活出发,我是一个要租房子的人,我要租房子,要找房屋中介,房源多。我不会去找房东,因为很难找到而且房东手里房源有限。对于房东来说,我只想把我的房子租出去,我不想找房客,也不想带房客看房或者是其他的一些行为。 对于我和房东来说中间需要一个中介。这个中介代表着房东将房子租给我。 中介就是房东的代理。中介和房东有共同的行为租房,交给中介去最后完成。

2022-02-19 11:48:12 389

原创 计算机网络----TCP,UDP 协议的区别

UDP协议UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等。TCP协议TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据

2022-02-18 16:36:32 167

转载 计算机网络----- 详细演示TCP(TCP,UDP 协议的区别)

动态图 详细演示 TCP_JineD的博客-优快云博客_tcp 动图你是一台电脑,你的名字叫 A只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B这就是物理层、数据链路层、网络层这三层所做的事情。站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做传输层。你本以为自己所在的第四层万事大吉,啥事没有,但很快问题就接踵而至。问题来了前三层

2022-02-18 12:50:43 145

原创 计算机网络---TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP,是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。连接机制三次握手(建立可靠的TCP连接) 客户端–发送带有 SYN 标志的数据包–一次握手–服务端 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端 为什..

2022-02-18 12:14:27 219

原创 计算机网络----初识

OSI体系结构七层协议TCP/IP体系结构四层协议中和的五层协议体系结构学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。应用层应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名..

2022-02-18 12:03:25 160

原创 spring----IOC理论

学习记录于[Spring框架]Spring IOC的原理及详解。 - 一枝花算不算浪漫 - 博客园背景类比齿轮耦合转动,一个齿轮出现问题,那么整个齿轮组都会产生很大的问题。齿轮的耦合关系和软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动

2022-02-14 15:56:01 155

原创 Spring----初识

Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网:Spring | Home。Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context 组件是实现IOC和依赖注入的基础,A

2022-02-14 15:44:24 434

原创 刷题之142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/p

2022-02-14 09:23:24 165

原创 一条mysql语句是如何在mysql执行的

MySQL 基本架构概览 连接器: 身份认证和权限相关(登录 MySQL 的时候)。 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。 分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。 优化器: 按照 MySQL 认为最优的方案去执行。 执行器: 执行语句,然后从存储引擎返回数据。 简单来说 M.

2022-02-13 14:42:50 139

原创 jvm----类文件结构

Java虚拟机提供的语言无关性Class类文件的结构Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符。Class的结构不像XML等描述语言,由于它没有任何分隔符号,所以在表6-1中的数据项,无论是顺序还是数量,甚至于数据存储的字节序(Byte Ordering Class文件中字节序为Big-Endian)这样的细节,都是被严格限定的,哪个字节代表什么含义,长度是多少,先后顺序如何,全部都不允许改变。魔数与Cl

2022-02-13 12:23:37 308

原创 jvm----类加载器

Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。类与类加载器比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。双亲委派模型两种不同的类加载器:一种是

2022-02-13 12:17:05 255

原创 jvm----类加载

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备、解

2022-02-13 12:10:58 449

原创 jvm----对象的内存分配策略

对象的内存分配,从概念上讲,应该都是在堆上分配(而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配 )

2022-02-13 10:58:13 653

原创 java------int=20是存在堆里还是栈里

如果方法里的局部变量 就会存在栈帧里的局部变量表中,如果是成员变量则存在于堆中,它属于int类的一个实例,存放在堆中开辟的空间。

2022-02-13 10:39:01 1274

原创 springmvc初浅析

springmvc和springboot的一点不同在于springmvc依托tomcat启动。tomcat是java原创团队写的,而现在的项目很多会调用自定义程序(非原创团队编写),包括一些注解,方法,甚至是controller。这些主方法所在的路径被记录在web.xml里面。所以在项目启动的时候会扫描这个xml文件。springmvc的一个启动原理首先扫描webapps,通过反射可以识别到的servlet文件,放入hashmap1中(基于tomcat)。然后读取web.xml文件(启动

2022-01-29 15:23:17 406

原创 java----锁的升级与对比 偏向锁-》轻量级锁-》重量级锁

目录偏向锁偏向锁的撤销轻量级锁轻量级锁加锁轻量级锁解锁重量级锁锁的优缺点比较​Java SE 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。一共有4种状态,从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,随着竞争情况会升级,但是不能降级。目的是为了提高获得锁和释放锁得效率。偏向锁大多数情况下,锁不仅不存在多线程竞争,而且总是由同一个线程多次获得,为了让线程获得锁得代价更低,引入了偏向锁,当一个线程访问同步块并获取锁.

2022-01-27 22:08:41 500

原创 java----锁(悲观,乐观,排他,共享锁,类锁,对象锁,方法锁)

悲观锁很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的

2022-01-27 10:57:47 1361

原创 刷题之455. 分发饼干 -----贪心初试

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别.

2022-01-24 12:33:32 100

原创 jvm----CMS垃圾收集器和Garbage FIrst 收集器

如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。垃圾收集器有很多,但是需要我去重点学习的就是CMS垃圾收集器和Garbage FIrst 收集器CMS收集器CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。基于标记-清除算法实现的,整个过程分为四个步骤:初始标记(CMS initial mark):初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。 并发标记(CMS concurrent mark):从

2022-01-23 11:02:40 113

空空如也

空空如也

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

TA关注的人

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