![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
零碎总结
文章平均质量分 59
盖丽男
这个作者很懒,什么都没留下…
展开
-
cpu与指令集
不同种类的计算机其机器语言是不兼容的,按某种计算机的机器指令编制的程序不能在另一种计算机上执行。是不是可以理解为这样,cpu内的硬件设计,直接对应指令集的设计,比如指令集规定:0000代表读取操作,那么cpu的电路设计应该有一部分是当电路状态为0000的时候,进行读取。当你去查jvm是如何执行我们的代码的,一般回答到“机器码”就结束了,这是令我最不能理解的地方,怎么?作为一个java程序员,我们都知道,当我们写完代码,java文件会被编译为class文件,然后交给jvm去执行,那么这个执行过程是啥样的呢?原创 2022-11-14 21:40:14 · 982 阅读 · 1 评论 -
认识java
模块化要解决的问题是:运行Java程序的时候,实际上我们用到的JDK模块,并没有那么多。不需要的模块,完全可以删除。过去发布一个Java应用程序,要运行它,必须下载一个完整的JRE,再运行jar包。而完整的JRE块头很大,有100多M。怎么给JRE瘦身呢?现在,JRE自身的标准库已经分拆成了模块,只需要带上程序用到的模块,其他的模块就可以被裁剪掉。模块。原创 2022-11-08 16:09:28 · 375 阅读 · 0 评论 -
常用电路符号
是一个限流元件,将电阻接在电路中后,电阻器的阻值是固定的一般是两个引脚,它可限制通过它所连支路的电流大小。学计算机组成原理,我觉得最困难的就是看电路图,cpu和存储老师都拿着一张张电路图讲,可是我根本不会分析啊妈呀。汇聚基本的电路图符号,例如:电池、接地线、二极管等,可以满足基础电路的绘制需求。以寄存器、转换器、计数器为代表的基础集成电路元器件,在电路图中较为常见。基本的电路符号,用于连接各元器件,起到“桥梁互通”的作用。是电路图中的控制元件,能够调节或改变电路的工作性能。所以整理一下,下次对着图读。原创 2022-11-13 16:29:56 · 2375 阅读 · 0 评论 -
逻辑门整理
AND门之所以如此命名是因为如果0被称为“假”而1被称为“真”,则该门的作用与逻辑“与”运算符相同。比如求相反数,求绝对值,求一个正数的平方根,这些都是单目运算。逻辑门主要使用二极管或晶体管作为电子开关来实现,但也可以使用真空管、电磁继电器(继电器逻辑)、流体逻辑、气动逻辑、光学、分子甚至机械元件来构建。双目运算,逻辑与的运算符通常记作∧。双目运算,逻辑或的运算符通常记作∨。双目运算,逻辑或的运算符通常记作∨。双目运算,逻辑或的运算符通常记作∨。首先我们规定,0为假,1为真。原创 2022-11-11 18:34:46 · 11498 阅读 · 4 评论 -
电脑是如何进行工作的(一)?
首先计算器通过输入设备获取信息,它会将输入的所有信息都转换为二进制来保存,然后它会通过CPU来处理和计算信息,最后,输出设备获取信息,并转换为物理输出。二进制,现在的计算机都是使用二进制来进行计算的,当然以前也出现过十进制,三进制等的计算机,然后当我们得到一个加法器,我们可以增加线路,得到一个n位的加法器。通过二进制和电路设计,我们可以实现加法器,如图。原创 2022-11-06 18:29:25 · 867 阅读 · 1 评论 -
【编译原理】词法分析
有限自动机是正则表达式的识别器。如果输入字符串成功处理并且自动机达到其最终状态,则接受它,即刚刚输入的字符串被认为是当前语言的有效标记。文法定义的形式-四元组(Vn,Vt,P,S): Vn为非终结符集,Vt 为终结符集,P为规则集,S为识别符|开始符,至少要在一个规则中作为左部出现,Vn ∩ Vt = ∅。正规式是定义正规集的数学工具,是说明单词的模式(pattern)的一种表示法,用它描述单词符号时一般比正规文法更简洁。有限自动机是对状态图的形式化描述,有限自动机M由五元组(X,Y,S,δ,λ)原创 2022-10-30 11:42:40 · 624 阅读 · 1 评论 -
JDK发展史
JDK包括两大部分:开发工具和运行环境。Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。原创 2022-10-23 13:44:03 · 2137 阅读 · 1 评论 -
静态语言和动态语言,解释和编译
先来看一下各种名词的定义。原创 2022-10-20 18:31:17 · 1888 阅读 · 1 评论 -
进程间通信
百度百科:进程通信是指在进程间传输数据(交换信息)。也就是说,进程通信,就是不同进程之间,来进行的信息交换。进程间通信(IPC)的一般目的,大概有数据传输、共享数据、通知事件、资源共享和进程控制等。原创 2022-10-09 18:01:17 · 411 阅读 · 1 评论 -
jstack常用命令
前几天运维告诉我们,我们有一台机器,从某天开始,出现了大量的查询sql,而且是同一条,db统计那里,百分之八十都是这条sql,然后查询量也上去了。表现就是这样,然后我们开始查这个问题,发现放服务的机器,cpu并没有涨很多,内存使用也还正常,但是当重新部署服务,的确有一台机器的sql查询量降了下来,这说明服务的确有问题,然后使用jstack命令查另一台还有问题的机器,发现某段代码一直出现,经过排查,最终确定这段代码写的有问题,当某个参数为空的时候,会变成死循环。原创 2022-09-25 14:43:40 · 378 阅读 · 0 评论 -
自定义线程池+countdownlatch
就需求来说,join可以做到,countdownlatch也可以做到,我喜欢用countdownlatch做,代码看起来简单点,然后涉及到要开启多线程,所以还是自己来维护一个线程池来用。latch.await如果不加等待时间的话,当某个线程执行出错,卡在那里,那么主线程会一直等待,这肯定是我们不想看到的,所以await一定要加等待时间。要给前端出个接口,一个数据展示接口,要从好几个表把数据统计出来,所以打算用多线程来查,查完了返回给前端。然后给一个task的例子。原创 2022-09-03 15:54:53 · 524 阅读 · 0 评论 -
springboot配置redis多数据源
Redis多数据源。原创 2022-07-27 17:42:03 · 1215 阅读 · 0 评论 -
gson与fastjson
关于json,我在代码里,最常用的有两个地方,一个是做类型转换的时候用,另一个是偷懒,在调用第三方接口的时候接数据用。从速度上来说,fastjson是比gson快的,我们的服务目前来说,还没有到考虑性能的时候,所以目前从fastjson切换到gson,先暂时不解决性能问题。...原创 2022-07-23 14:21:32 · 1265 阅读 · 0 评论 -
idea按条件断点调试
程序员应该会经常用到idea的断点调试,然后调试的时候,我有个需求是,代码里有个循环,然后当循环到某个数据的时候,我才想一步一步的跟一下,之前一直知道有这个功能,但是没有真的用过,这周终于用了一次,不禁感叹太好用了,所以写博客记录一下...原创 2022-07-09 16:06:55 · 1655 阅读 · 1 评论 -
2022半年总结
上半年,感觉自己以周为单位的得过且过,没有主动的学习,就是一种,失去主线任务的感觉,每天停下来问自己,不知道自己想干嘛,以前是想了很多,做了很少,上半年是想都不想了。我觉得疫情也的确影响到了我,如果没有疫情,我可能会早早的计划一个月后,两个月后去哪儿玩,做些什么,疫情存在的现在,我已经没有久一些的计划了,同时人也变得很消极。...原创 2022-07-03 19:20:32 · 171 阅读 · 0 评论 -
[springboot]jasypt加密
公司要求任何地方,不能存储数据库明文,也就是git里,不能出现数据库的密码明文配置,所以我们使用的是jasypt来做的,同时将这些配置放到了apollo来管理,所以简单介绍一下jasypt。Jasypt 这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成 hibernate,Spring Security(Acegi)来增强密码管理。Jasypt是一个Java库,可以使开发者不需太多操作来给Java项目添加基本加密功能,而且不需要知道加密原理。原创 2022-06-26 18:05:36 · 803 阅读 · 2 评论 -
【java】对URL中的中文和符号进行UrlEncode转码
需求我们有一个需求,是和钉钉审批打通的,然后有需要放附件的地方,没有用钉钉云盘附件的那种形式,而是直接用了单行文本框,放一个链接的形式。然后我们文件上传用的是ali的oss,上传完成以后会得到一个类似 ossHost/文件夹名/文件名的链接,此时就会有一个问题产生,如果我的链接中带中文,当我把这个链接放到钉钉的文本框中提交以后,从中文部分开始,不会被识别为链接的一部分,这可就阿西吧了。当时发现这个问题的时候,我基本是懵的,脑袋里完全没有解决方案,然后组长说,你试试urlencode一下再放到文本框里。原创 2022-05-21 10:33:40 · 7984 阅读 · 0 评论 -
docker常用命令
背景目前我们的服务部署是通过jenkins,然后服务是容器部署的,所以就需要使用一些简单的docker命令来查看信息等等,所以简单记录一下自己常用的docker命令代码直接上代码查看镜像列出本地镜像docker images拉取新镜像一般我们可以去docker hub查找想要使用的新镜像,然后copy拉取的命令就可以啦。docker pull ubuntu:13.10删除镜像docker rmi 54301e8a1f0d启动一个容器启动的时候还可以添加各种参数dock原创 2022-05-01 17:48:35 · 1035 阅读 · 0 评论 -
【java】springboot项目打包成docker镜像
背景我们的服务是springboot开发的,但是部署的时候是使用的docker部署的,所以在打包的时候,需要打包成docker image,下面说说如何进行配置,才能在package的时候得到docker镜像。环境本地环境打包的话,要求在本机安装了docker才可以,大家注意一下。配置pom配置 <version>1.0</version> <artifactId>user-service</artifactId> <原创 2022-04-22 11:38:30 · 1020 阅读 · 0 评论 -
php的openssl_encrypt改写成java版
需求我们之前的服务是php的,然后接下来的新功能打算用java开发,php的功能也打算后续迁移过来,然后数据库里的手机号是加密过的,所以java这边也需要按照相同的规则去加解密,下面就是过程实现php先看下原来的php代码 public static function encryptNew($plaintext) { //加密模式选择的AES-128-ECB,注意128表示密钥应该是16位的,16x8=128 $cipher = 'AES-128-ECB';原创 2022-04-14 17:15:28 · 1994 阅读 · 0 评论 -
springboot多数据源配置
背景现阶段公司的各种基础设施都不是很完善,所以很多开发内容都打算放到一个项目里,这就涉及到连接多个数据库的问题,我们的服务之前是单数据源的,所以要改成多数据源的。代码修改前现在其实将项目修改成多数据源还是很简单的,首先看一下单数据源的时候配置是啥样的:spring: datasource: username: db_username password: WXx9sisvzqfbU url: jdbc:mysql://localhost:3306/db_name?useU原创 2022-04-07 15:46:04 · 1565 阅读 · 0 评论 -
前端|Ant Design介绍
引入现在的公司前端人员比较少,所以一些简单的前端功能,需要开发人员自己改,公司大部分对的前端 ,用的Ant Design 做的,所以今天先简单做个了解。是什么Antd是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。官网上是这么介绍自己的,React是用于构建用户界面的JavaScript库, 起源于Facebook的内部项目,该公司对市场上所有 JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。于2013年5原创 2022-03-27 20:04:30 · 8021 阅读 · 0 评论 -
【问题解决】jasypt-spring-boot-starter导致apollo动态配置刷新失效
目录背景原因解决方案背景1.项目中关于数据库密码等信息想要进行加密处理,所以引入了jasypt-spring-boot-starter,版本3.0.32.后来项目接入了apollo的动态配置中心3.此时发现@Value的值,不能进行动态刷新,当发布新配置时,apollo会进行更新操作,可是程序里仍旧是旧值4.通过查看文件,可以看到本地拉下来的配置文件中,值已经同步成和apollo配置中心一样。原因这块我理解的还不够透彻,大家可以看一下apollo的这个issues,等我研究明白了我再写,先看这原创 2022-03-16 19:37:30 · 5245 阅读 · 4 评论 -
SPRINGBOOT启动原理(基于2.x版本)(二)-SpringFactoriesLoader
目录版本SpringFactoriesLoader引入介绍代码版本版本:2.5.5上一篇:SPRINGBOOT启动原理(基于2.x版本)(一)SpringFactoriesLoader引入从上一篇可以看到,代码中频繁地使用到了SpringFactoriesLoader这个类,大致能看出来是为了拿类的,今天我们详细的研究一下。介绍看一下官网的介绍:General purpose factory loading mechanism for internal use within the fr原创 2022-03-11 17:52:11 · 445 阅读 · 0 评论 -
【读代码】Guava的CacheLoader
来看一段代码,代码中有两个打日志的地方,请问哪个会先打印出来?这里使用的是Guava的CacheLoaderpackage com.example.demo.config;import com.alibaba.fastjson.JSONObject;import com.google.common.cache.CacheBuilder;import com.google.common.cache.CacheLoader;import com.google.common.cache.Loadin原创 2022-02-25 18:34:39 · 1175 阅读 · 0 评论 -
spring获取环境变量
需求想分辨一下test/prod环境,然后根据环境做一下逻辑处理,比如为测试环境添加了一个通用密码。。。当然这样不太好,不要学我。实现一开始我是想通过application.yml文件里面设置的spring: profiles: active: local来判断的,后来代码写了个bug误以为没起效,就又研究了一下其他方式,当然这种方式实际上是没问题的。现在把这几种方式都记录一下,以供参考。读取配置文件方式首先配置文件内容如下:spring: profiles: ac原创 2022-02-18 14:29:43 · 4463 阅读 · 0 评论 -
SPRINGBOOT启动原理(基于3.x版本)(一)
目录版本注解@SpringBootApplication@EnableAutoConfiguration@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})介绍指定class数组方式ImportSelector方式(Spring Boot底层采用比较得多的方式)ImportBeanDefinitionRegistrar方式正题参考版本版本:2.5.5注解我们从启动类入手,springboot的启动类上要添加原创 2022-02-12 16:43:46 · 632 阅读 · 0 评论 -
AES加密
调用钉钉/飞书等的接口,或者回调的时候,会发现他们都对内容进行了加密处理,而且都是用的AES加密,所以写个博客记录一下,什么是AES加密密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26原创 2022-02-06 18:09:07 · 2607 阅读 · 0 评论 -
[java]如何通过AOP打日志
需求把接口的入参出参打印出来代码因为只是需要接口的入参出参,所以我们拦截controller文件夹就可以。@Component@Aspect@Slf4jpublic class MethodLogAspect { @Around("execution(public * com.test.log.controller..*.*(..))") public Object doAuthMethodInterrupt(ProceedingJoinPoint point) { Ser原创 2022-01-25 16:46:50 · 385 阅读 · 0 评论 -
springboot整合jwt
这里写目录标题目的优缺点优点缺点代码pom引入生成jwt校验jwt刷新jwt其他用法总结目的一般系统都有登陆和验证用户是否登陆的需求,现在的项目好多都是前后端分离的,一般的session也不适合于多台机器同时提供服务的场景,所以可以使用jwt生成token,然后使用token来鉴定该用户是否登陆/登陆是否过期等。优缺点优点生成token简单,可以携带简单信息验证方便,不需要数据库等二次验证缺点一旦签发就不受服务端控制想要更新必须生成一个新的token代码pom引入有两种用的比原创 2022-01-15 14:37:09 · 378 阅读 · 0 评论 -
【职场】近期工作感悟
入职一个多月了,自我感觉和领导还处于磨合期,记录一下自己最近遇到的事情和可以提高的地方,警醒一下自己。事件只说很小的一个点,我们把表和代码写的差不多以后,领导和我说,给客户加一个账号表,目前可能还不用,先冗余上,于是我啥也没想,就直接设计了这么一张表:CREATE TABLE `customer_account` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id/账号id,', `customer_id` bigint NOT NULL C原创 2022-01-08 17:53:21 · 3185 阅读 · 0 评论 -
springboot整合kafka,kafka消息过滤
需求出于成本考虑,我们只使用了两个topic,测试环境一个,线上一个,然后大家的消息都发到同一个topic里,所以在消费时,就需要实现消息过滤。kafka是没有tag等功能的,所以过滤只能在消费端实现。下面直接上代码代码配置文件spring: kafka: bootstrap-servers: 127.0.0.1:9092 # kafka连接接地址 # client-id: # 发送请求时传给服务器的id consumer: topic: TEST_XX原创 2021-12-23 15:25:22 · 5812 阅读 · 1 评论 -
【如何】guava的RateLimiter使用
为什么要限流在调用一些第三方的接口时,他们会有一些调用频率的限制,比如每秒不能超过多少次,这种时候,就需要用到限流的工具。定义还是给一个定义出来:在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存 缓存的目的是提升系统访问速度和增大系统处理容量降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理原创 2021-12-17 12:13:03 · 1552 阅读 · 1 评论 -
【java】线程和线程池
线程首先明确一下,我们最经常听到的一句话,一个进程可以对应多个线程,一个线程只能属于一个进程。在JAVA里,JVM 中的线程与操作系统的线程是一对一的关系,所以在 JVM 中每创建一个线程就需要调用操作系统提供的 API 创建线程,赋予资源,并且销毁线程同样也需要系统调用。为什么我们需要多线程呢?就现在的操作系统来说,天然的就是多进程/线程处理任务,最常见的,我们的电脑,可以处理word的时候听音乐,看电视等等,并不是看起来同一时刻只能做一件事。至于多线程/进程的原因随着技术发展,cpu的运行速原创 2021-11-09 16:04:42 · 349 阅读 · 0 评论 -
【算法】二叉树相关算法
标题二叉树的遍历前序遍历中序遍历后序遍历深度优先遍历DFS广度优先遍历BFS层级遍历深度二叉树的深度二叉搜索/查找树构建验证查找假设我们的二叉树长这个样子先定义一下我们的节点@Datapublic class TreeNode { int val; //左子树 TreeNode left; //右子树 TreeNode right; //构造方法 TreeNode(int x) {原创 2021-11-05 16:34:51 · 197 阅读 · 0 评论 -
到底什么是内存可见性?
我们都知道,volatile保证了内存可见性和禁止指令重排,但是对于内存可见性这一条,我一直没有完全弄明白,今天咱们一起看一下,这个可见性,到底是如何可见,数据到底是如何可见的。首先我们要达成一个共识:单核CPU由于同一时刻只会有一个线程执行,而每个线程执行的时候操作的都是同一个CPU的缓存,所以,单核CPU不存在可见性问题。要了解清楚什么是内存可见性,我们需要先明确几个关键字的含义。定义cpu缓存今天主流的CPU架构来说,现在的CPU主要采用三层缓存:L1、L2缓存成为本地核心内缓存,即一.原创 2021-09-17 13:58:33 · 530 阅读 · 0 评论 -
【数据结构】树与二叉树
定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:有且仅有一个特定的称为根(root)的结点;当n>1时,其余结点可分为m(m>0)个互补交互的有限集T1、T2…Tm,其中每一个集合本身又是一棵树,并称为根的子树(SubTree)。二叉树是另一种树形结构,其特点是每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。与树相似,二叉树也以递归的形式定义。二叉树是n(n≥0)个结点的有限原创 2021-09-05 14:40:00 · 538 阅读 · 1 评论 -
【数据结构】跳表
跳表是什么跳表的全称是跳跃表,它的基础是有序链表,在有序链表的基础上,增加多级索引,实现快速查找。为什么需要跳表可以看出来,跳表是从有序链表发展来的,它是为了解决链表查找速度慢的问题而设计的,通过跳表,可以将查找速度从O(n)提高到O(log(n)),而空间复杂度还维持在O(n),虽然空间复杂度看起来并没有变化,但肯定是比之前要耗费空间的,所以跳表属于用空间换时间。跳表的数据结构可以看一下跳表的数据结构跳表性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveID原创 2021-08-22 12:05:11 · 364 阅读 · 0 评论 -
数组和链表
定义数组和链表都属于“线性表”,也就是数据排列成一条线一样的结构,线性表,只有前后两个方向。数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。因为需要连续的内存空间,所以即使内存中宗空间足够大,但是只要不是连续的,数组就不能成功申请到内存。也就是说只要知道数组中第一个对象的位置,我们可以很轻易的通过偏移量来定位数组中其他数据的位置。链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。链表比数组原创 2021-08-14 17:01:58 · 851 阅读 · 0 评论 -
java缓冲池
类型java的缓冲池分为两种,数值型的和字符串类型的。缓冲池空间位于垃圾收集器管理的内存之外。 这是分配本地堆外内存的一种方法。字符串缓冲池String被声明为final,因此它不可被继承。在java8中,String内部使用char数组存数据。数值型缓冲池Boolean,缓存了 true/false 对应实例,确切说,只会返回两个常量实例Boolean.TRUE/FALSE。Short,同样是缓存了 -128 到 127 之间的数值。Byte,数值有限,所以全部都被缓存。Character原创 2021-08-08 17:00:56 · 752 阅读 · 0 评论