自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于对kafka的理解

kafka

2022-08-31 22:09:33 400 1

原创 建造者模式

a

2022-08-28 20:27:13 103

原创 A*搜索算法

f

2022-06-05 22:08:50 109

原创 一些设计-pageInfo

public class PageInfo { private int page = 10; private int num= 1; public PageInfo() {} public static PageInfo newPageInfo() { return new PageInfo(); } public PageInfo setPage(int page ) { this.page = page ; return this; } public PageIn

2022-05-30 16:51:27 103

转载 计算机启动过程

关于这一个问题,网上有很多答案,但是说法都比效官方:BIOS 按照“启动顺序”,把控制权转交给排在第一位的存储设备:硬盘。然后在硬盘里寻找主引导记录的分区,这个分区告诉电脑操作系统在哪里,并把操作系统被加载到内存中,然后你就能看到经典的启动界面了,这个开机过程也就完成了。看完这一段话,你肯定会有很多疑问:为什么是 BIOS 主导这一切?怎么叫按照启动顺序?这个分区咋就被加载到内存了,有咋告诉电脑操作系统在哪里了?对于以上的官方回答,我们来说说人话。但是在说人话之前,我们得先了解一些前置知识:1、内

2022-05-01 09:54:34 878

转载 关于最多能有多少个TCP连接的学习

一、关于tcp连接当一个进程需要与远程建立tcp连接时,需要找os申请,这时,需要4个信息:源ip,源端口,目标ip,目标端口如:123.126.45.68,(),110.242.68.3,80其中源端口由os分配一个可用的数字(0-65535),最后os会返回给进程一个文件描述符,如:5,后面进程与目标进行通信时,对着文件描述符读写就好了。二、端口号一直重复上述过程,直到connect cannot assign requested address,表示端口号不够用了。问题:此时一共创建了6

2022-04-24 23:06:56 563

原创 工作防踩坑之-aspect打印接口参数

2022-04-20 15:36:12 423

原创 关于数据库锁的自问自答

一、隔离级别能解决什么1、读未提交(ru):啥也不是2、不可重复读(rc):解决了脏读。不会读取到未提交的数据3、可重复读(repeatable-read):解决了不可重复读。使用的是一致性非锁定读,总是读取事务开始后第一次读取的快照版本。可以避免幻读的产生。4、串行化(serializable)二、为什么会出现事务并发问题为什么会出现“脏读”?因为没有“select”操作没有规矩。为什么会出现“不可重复读”?因为“update”操作没有规矩。为什么会出现“幻读”?因为“insert”和“d

2022-03-21 22:00:21 664

转载 关于消息未读和已读的学习

企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,该如何设计呢? 每一条消息,已读未读详情其实就是一个0/1的标记而已,我们可以选择维护一个bitmap来实现。 每个群的信息保存userid到自增mapid的**映射**,这样群成员每加入一个群里,就有mapid<->usreid的双向映射了。 假如群里有5个成员ABCDE, 那就对应mapid 1-5,mess.

2022-02-26 18:20:29 1042

原创 关于高可用的认识

一、什么是高可用 高可用(High availability,缩写为 HA),是指系统无中断地执行其功能的能力,代表系统的可用性程度。 高可用的主要目的是为了保障“业务的连续性”,即在用户眼里,业务永远是正常对外提供服务的。二、高可用架构设计 针对架构的高可用,第一步,采用分层的思想把一个大的IT系统拆分成应用层,中间层,数据存储层,每一层再拆分为更细粒度的组件;第二步,让每个组件对外提供服务,毕竟每个组件不是孤立存在的,需要互相协作。 高可用可分为“冗余”和“自动故障转移...

2022-02-23 19:10:38 9130

原创 学习笔记2022.2.22

一、延迟与响应时间1、延迟:请求花费在处理上的时间2、响应时间:客户端看到的,除了处理请求时间外,还包括来回网络和排队的延迟二、请求时间即使是反复发送、处理相同的请求,每次都会有不同的响应时间,偶尔还会有异常表示需要更长的时间,原因可能为:上下文切换,进程调度,网络数据包丢失,TCP重传,垃圾回收暂停,缺页中断(访问的页不在内存中,需要通过从外存加载该页到内存中),磁盘I/O,服务器机架的机械振动...

2022-02-22 15:11:35 546

原创 关于《数据密集型应用系统设计》-twiiter

一、twitter的两种推送方式1、不做提前运算,每次刷新时,关联表查询数据。优点:不会有额外的时间、空间占用缺点:读负载压力随用户量增加会与日俱增2、提前运算。对每个用户维护一个时间线缓存,当推送一个新tweet时,查询其关注者,并把新tweet插入到每个关注者的时间线缓存中。优点:加速读性能缺点:在发布tweet时增加了大量额外的工作,如:平均75个关注者和每秒4.6k的tweet,则需要每秒4.6*75=345k的速率写入缓存。同时,某些用户有上千万的关注者,意味着在峰值,会出现一个twe

2022-02-22 14:10:49 151

转载 关于redis中SDS的细节

一、问题的产生为什么redis速度快?因为他们有独特的数据结构,如String类型的SDS,那么SDS到底是什么样子的,这么设计有什么好处?二、SDS结构SDS是Simple Dynamic String的缩写。struct sdshdr { // 记录buf中已使用的字节数,等于SDS中保存字符串的长度 unsigned int len; // 记录buf中未使用的字节数 unsigned int free; // 用于保存字符串 char buf[];}buf的尾部自动追加一个

2022-02-18 14:19:01 453

原创 防踩坑笔记

数组异或的交换,不能有下标相同的互换!!public void swap(int[] arr, int a, int b) { arr[a] = arr[a] ^ arr[b]; arr[b] = arr[a] ^ arr[b]; arr[a] = arr[a] ^ arr[b]; }这里的a,b如果相同,最后会出现arr[a]=0,所以这里要排除a=b的情况...

2022-02-13 21:17:25 189

原创 MySQL的主备同步

一、原理A:主库B:备库1、主库接受到客户端发送的一条update语句,执行内部事务逻辑,同 时写入binlog。2、备库通过 change master 命令,设置主库的IP、端口、用户名和密码,以及要从哪个位置开始请求 binlog。这个位置包含文件名和偏移量。3、在备库上执行start slave命令,启动两个线程 io_thread 和 sql_thread,其中 io_thread 负责与主机进行连接。4、主库校验完用户名和密码,按照接收到的位置去读取binlog,发给备库。5、

2022-01-10 14:29:07 2149

原创 jvm参数

-X显示有效的-X选项的帮助信息-Xloggc:filename将GC(garbage collection)信息重定向到filename。当-Xloggc和-verbose:gc同时给出时,-Xloggc将重载-verbose:gc-Xmnsize设置堆中年轻代(young generation)的初始值和最大值大小。单位是bytes,常用K,M,G (不区分大小写)年轻代主要放置新对象,这块区域也是GC执行比较频繁的区域。如果该区域设置较小,可能导致频繁minor GC,如果设置过大,

2021-03-29 14:01:52 496

原创 base64转图片

private static InputStream BaseToInputStream(String base64string){ByteArrayInputStream stream = null;try {BASE64Decoder decoder = new BASE64Decoder();byte[] bytes1 = decoder.decodeBuffer(base64string);stream = new ByteArrayInputStream(bytes1);} catch

2021-03-17 10:18:43 71

原创 网络编程-Go

Go语言基础之网络编程2017年6月26日 | Golang 本文总阅读量20226次现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程。 关于网络编程其实是一个很庞大的领域,本文只是简单的演示了如何使用net包进行TCP和UDP通信。如需了解更详细的网络编程请自行检索和阅读专业资料。互联网协议介绍互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite)

2021-03-11 21:54:27 81

原创 内存模型.

int a = 1;int b = 2;int c = (a+b) * 10;return c;javap -c class文件转化为字节码文件1: istore_1//将int类型值存入局部变量1 2: iconst_2//将int类型常量2压入操作数栈3: istore_2//将int类型值存入局部变量24: iload_1//从局部变量1中装载int类型值5: iload_2//从局部变量2中装载int类型值6: iadd//执行int类型的加法7: bipush 10//将一

2021-02-08 15:34:51 57

原创 executorService

ExecutorService 的理解和使用前言:我们之前使用线程的时候都是使用new Thread来进行线程的创建,但是这样会有一些问题。如:a. 每次new Thread新建对象性能差。b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。c. 缺乏更多功能,如定时执行、定期执行、线程中断。相比new Thread,Java提供的四种线程池的好处在于:a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。b. 可有效控制最大并发线程数,提

2021-01-12 13:43:31 211

原创 pg库创建序列号

//pg库创建序列号create sequence dbname_id_seq increment 1;//设置序列号从已有表中的最大值开始递增select setval(dbname_id_seq,select max(id) from dbname);ALTER TABLE public.so_cars_roadplans ALTER COLUMN id SET DEFAULT nextval('so_cars_roadplans_id_seq'::regclass);...

2020-12-30 17:10:41 1875

原创 countDownLatch与executorService的demo

package com.moxi.mougblog.base.util;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class CountDownLatchU

2020-12-30 17:06:43 307

原创 自定义参数非空判断

package com.moxi.mougblog.base.util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import lombok.Data;import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Field;@Data@Slf4jpublic class IsEmptyUtil { @ParamCheck(

2020-12-24 18:07:17 287 1

原创 countDownLatch

package com.moxi.mougblog.base.util;import java.util.HashMap;import java.util.Map;import java.util.concurrent.CountDownLatch;public class CountDownLatchUtils { public static void main(String[] args) { int threadNum = 10; CountDow

2020-12-22 16:20:56 133 1

原创 httpPost发送json或xml参数的请求

import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClientBuild

2020-12-02 11:22:48 883

原创 生成PDF

public File getPdfFile(DocumentDto document){ byte[] documentPdf = DocumentPDFUtil.getDocument(document); //字节数组,位置,文件名 File file = PdfUtil.createPdfFile(documentPdf,position,fileName); } private static byte[] getDocument(DocumentDto document){ .

2020-11-02 10:05:12 105

原创 url转base64

本地图片转base64编码 private static String ImageToBase64(String imgPath) { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 InputStream in = null; byte[] data = null; // 读取图片字节数组 try { in = new FileInputStream(imgPath);

2020-09-17 16:15:00 4740

原创 关于统计list中int数据

有时候我们会遇到,求一个数组中,一个int字段的和为多少的需求,代码如下:Lis<Student> list = new ArrayList<>();int sum = list.stream().mapToInt(Student::getNum).sum();有点意思吧,还有更多呢IntSummaryStatistics statistics = list.stream().mapToInt((student) -> student.getNum()).summar

2020-09-16 22:15:17 662

原创 位运算

1.异或运算 ^相同为0,相异为1左移高位(左边)丢弃,低位(右边)补0左移n位,将它的值乘以2的n次方右移符号位不变,低位舍弃,高位补上符号位右移n位,将它的值除以2的n次方参与运算:补码参与运算,转换为补码参与运算,再转化为原码,得到结果原码:一个数的二进制表示方式反码:正数:和原码一样负数:符号位不变,其余位按位取反补码:正数:和原码一样负数:符号位不变,在反码的基础上+1...

2020-09-15 16:19:23 67

转载 hashMap底层原理

Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap。其中,对于HashMap,有如下认知:HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分(链表>6&数组>=64,转化为红黑树;红黑树节点<6,转化为链表))实现的。HashMap就是使用哈希表来存储的。哈希表为解决冲突,可以采用开放地址法和链地址法等来解决问题,Java中Hash

2020-09-15 11:04:59 173

原创 通过url创建file,并转成base64

通过url创建fileprivate File getFile(String url){ String fileName = url.substring(url.lastIndexOf(".")); File file = new File(fileName); URL urlFile = null; InputStream in = null; OutputStream out = null; try{ urlFile = new URL(url); in = urlFile.ope

2020-08-29 14:08:18 722

原创 关于访问https时,绕过证书验证

private JSONObject doPost(String url){ //创建httpClient HttpClient client = HttpClientBuilder.create().build(); //绕过证书验证 try{ HttpsClientUtil.trustAllHttpsCertificates(); } catch (Exception e){ e.printStackTrace(); } HostnameVerifier hv = new Host

2020-08-29 13:23:52 1671 1

原创 不同类型数据的兼容保存--反射

最近在工作中遇到了这种的需求在一个视频页面,要通过websocket实时保存很多数据,但是数据的字段类型不一致(如果订单号是String,客户id是Long,客户下单的时间是Date),1、前端每修改一个数据(每次只会传过来一个数据),就会发送信令通知到后端,保存进数据库。2、最后还要在关闭页面时,发送所有数据到后端,再统一做一次保存。对于这样的场景,就无法通过固定类型去接收参数,于是采用了反射的方式来处理,下面上代码思路:1、首先,我把所有前端会传过来的值,全部写在一个dto中,并和前端约定好

2020-08-23 23:10:54 154

原创 2020-08-10

查找文件find / -name filename.txt或which/where(怎么样,很形象吧)查看一个程序是否运行ps –ef|grep tomcat或deployadmin -s 程序名 -a list如果是running,就是在运行如果是down,则是挂掉了,可以用deployadmin -s 程序名 -a restartall来强制重新启动终止线程kill -9 19979终止线程号为19979的线程查看文件,包含隐藏文件ls -al当前工作目录..

2020-08-10 21:45:36 106

原创 关于动态sql的子查询

工作中遇到了一个查询需求,想查出来的数据结构是这样的 List<Student> studentList = studentMapper.selectStudentInfo(); Student的结构是这样的public class Student{ private Long studentId; private List<Report> reportList;}public class Report{ private String type; private S

2020-07-02 22:32:35 800

原创 pgsql中多表联查,查数据在另一张表的数量-6.10.20

现有以下两张表 现在我想查出,每一个班级,有多少位学生select class.id,class.name,table.studentNum from class left join --联合student和class表,先查出每个班有多少个学生(select class.id,count(student.id) as studentNum from class left join student on class.id=student.class_id

2020-06-10 22:07:03 2045 1

原创 关于内省Introspector-工作小结6.8.20

今天在工作中,遇到了一个比效复杂,但不困难的,,,困扰吧。是这样的,我从数据库中,读取出了最近七天的数据(当然是个list,属性值和后面的dto中属性值一样),然后我需要按天数把它装进一个dto(这个dto里包含了一整天的数据,而一天的数据不超过10条)。举个粟子吧public class user{ private String id1; private String name1; private String sex1; private String date1; private Str

2020-06-08 22:37:18 122

原创 配置git的ssh私钥配置

今天项目组来了一个新同事,看到他那一头茂密的黑发,我大概就知道,这段时间有的忙了。果不其然,在给他加了代码权限后,同事用http的方式clone下了代码,但是不能pull和push,来找我求助。看了一下,不知道问题在哪儿,就帮他在github上配置了一个私钥,用ssh的方式,就可以pull和push代码了,具体操作如下:首先,肯定要安装好git(废话,我都知道我pull、push不了代码了,肯定是装了git的啊)第二步,右键git bash here打开命令行3、输入ssh-keygen -t r

2020-06-04 21:11:49 241

原创 关于动态sql-工作小结6.4.20

在工作中,有时候会遇到,把多张表中的数据拼接起来的需求,可以使用到concat()函数同样,此处的数据库为pgsqlselect concat(id,name) from student显示的结果为id+姓名的字符串,如:u_001张三但有时,又希望拼接的字符串用逗号分隔开,这时,就可以用到concat_ws()函数select concat_ws(",",id,name) from student显示的结果为id+,+姓名的字符串,如:u_001,张三同理,如果想用-分隔开,把逗号换成-

2020-06-04 21:00:44 123

原创 关于in与exists的sql优化(记录人生中第一次sql优化)

这是一个阳光明媚的下午,刚端起咖啡的我,余光瞥到了电脑右下角弹出的工作群消息,不禁心头一颤。在一番激烈的心理活动后,我还是先喝了一口咖啡,再点开了消息。因为我知道,如果先点开消息,那今天可能喝不到咖啡了,至少,喝不到热咖啡了。“生产问题,数据超过6000条时,查询数据接口超时,@土豆,跟踪一下”“我的偏头痛可能就是这样的消息看多了吧”,我心想着,麻利地敲下两个字:“收到”问题定位很简单,查询的sql太复杂,优化不够,导致接口超时。原sql如下:<select id="selectOrderB

2020-06-03 20:31:30 369

空空如也

空空如也

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

TA关注的人

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