自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 中间件__

面对分库分表可能join的操作,容易造成内存不够,引入es(数据异构 + 宽表),实现读写分离日志采集(ELK,Logstash(日志收集过滤)、Elasticsearch、Kibana(可视化))

2023-02-17 17:24:12 448

原创 dubbo_

dubbo学习

2023-02-15 17:38:36 472

原创 纪录片__

经济学:研究人的选择,资源是稀缺的(比较优势),对全球整体有利,但是可能分配不均:计划经济与市场经济,全球绝大多数处于这两者之间,除了朝鲜和新西兰,区别在于政府干预多少(空气污染,工人待遇,社保):两条相交的线;自由市场将稀缺的资源进行最有效率的分配,但是不是所有都适用(器官买卖,),需要受到监管。

2023-02-04 11:11:59 335

原创 经济学学习(宏观)

1

2023-01-16 10:05:37 856

原创 经济学学习(微观)

经济学:研究人的选择,资源是稀缺的(比较优势),对全球整体有利,但是可能分配不均:计划经济与市场经济,全球绝大多数处于这两者之间,除了朝鲜和新西兰,区别在于政府干预多少(空气污染,工人待遇,社保):两条相交的线;自由市场将稀缺的资源进行最有效率的分配,但是不是所有都适用(器官买卖,),需要受到监管。

2022-12-13 22:19:07 2070

原创 经济学原理(网课)

赚钱方法微观经济学:洗脑需求控制供给宏观经济学:经济危机暴涨暴跌。

2022-10-12 21:52:20 3746

原创 设计模式_

评估代码质量:可维护性,可读性,可拓展性,灵活性,简洁性,可复用性,可测试性。

2022-08-18 17:07:15 72

原创 面试__编程

2. 栈单调栈每日温度(减栈)# 栈中元素为下标和温度值,温度减少才入栈去除重复字符(增栈,考虑剩余)# 先统计每个字符的个数;遍历,set或者数组判断是否已存在,若不存在,看是否更小且后面还有(通过统计的个数),是则入栈,且更新set为没有求最大矩形(增栈)# 从左往右遍历,递增则入栈,否则栈顶元素逐渐出栈,高度(栈顶元素的下标对应的值)*宽度(i-stack.peek-1)= 面积,求面积最大值4. 数组5. 回溯(深度优先,递归)一般有两个方法5. 递归(树的深度优先)# 方法一般

2022-07-02 12:10:22 190

原创 面试__八股

面试八股文

2022-07-02 12:09:38 339

原创 docker和虚拟机对比

docker和虚拟机对比

2022-06-16 12:01:06 429

原创 算法leetcode

1. 0-1背包;动态规划public int testPack(int[] weight, int[] value, int cap){ if(cap == 0 || weight.length == 0){ return 0; } int len = weight.length; int[][] f = new int[len][cap + 1];//cap+1因为给定容量为cap,因此j的循环必须到cap

2022-05-12 20:40:01 216

原创 性能调优实战

概述衡量指标响应时间TPS(每秒事务处理量)计算机资源分配使用率(CPU 占用率、内存使用率、磁盘 I/O、网络 I/O)负载承受能力1. java编程调优string对象char2个字节,byte1个字节即使使用 + 号作为字符串的拼接,也一样可以被编译器优化成 StringBuilder的方式。但再细致些,你会发现在编译器优化的代码中,每次循环都会生成一个新的 StringBuilder 实例,同样也会降低系统的性能。平时做字符串拼接的时候,我建议你还是要显示地使用 Stri

2021-09-13 20:51:43 213 1

原创 redis 命令

设置过期时间1: set key value ex 10(单位秒) set key value px 10(单位毫秒)2: expire key 20(单位秒) pexpire key 20(单位毫秒)3:(到某个时间点过期) expireat key 20(单位秒) pexpirear key 20(单位毫秒)set单个元素过期时间用 redis 的普通 set 类型实现。把时间戳 encode 进元素名称中,比如平常只是 add 一个元素 f

2021-05-26 14:34:41 104

原创 7. java 线程

Java中wait和sleep的区别Thread.sleep(long millis),一定是当前线程调用此方法,当前线程进入TIMED_WAITING状态,但不释放对象锁,millis后线程自动苏醒进入就绪状态。作用:给其它线程执行机会的最佳方式。Thread.yield(),一定是当前线程调用此方法,当前线程放弃获取的CPU时间片,但不释放锁资源,由运行状态变为就绪状态,让OS再次选择线程。作用:让相同优先级的线程轮流执行,但并不保证一定会轮流执行。实际中无法保证yield()达到让步目的,因为让

2021-05-21 10:31:15 112 1

原创 netty

背景“点”(知识点)“线” (流程)实战

2021-05-19 08:57:08 95

原创 mysql事务

mysql事务原子性: 回滚日志(undo log)持久性: 重做日志(redo log)隔离性: 锁一致性:(通过AID及用户自定义完整性保证)一致性是事务追求的最终目标:前面提到的原子性、持久性和隔离性,都是为了保证数据库状态的一致性。此外,除了数据库层面的保障,一致性的实现也需要应用层面进行保障。一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度

2021-05-13 20:56:35 94 1

原创 1. 虚拟机(极客)

https://static001.geekbang.org/resource/image/41/77/414248014bf825dd610c3095eed75377.jpg

2021-04-11 23:01:02 753

原创 Elasticsearch

简介接入方式功能构成常用案例搜索日志分析

2021-03-30 23:20:55 96

原创 分布式(极客)

高性能、可扩展、高可用、低资源占用协调同步互斥访问共享资源 集中式管理 协商(分布式算法) 令牌环分布式选主 Bully算法(节点id大的是主,MongoDB的选举(id是时间戳)) Raft算法(民主投票,多的赢,Google 开源的 Kubernetes) ZAB 算法(具有优先级的民主投票,相较于 Raft 算法的投票机制,ZAB 算法增加了通过节点 ID 和数据 ID 作为参考进行选主,节点 ID 和数据 ID 越大,表示数据越新,优先成为主。

2021-03-23 15:07:14 329

原创 MongoDB

基础非关系型,基于json,通过分片横向拓展json,不用先建模特点高可用可拓展

2021-03-14 11:12:21 49

原创 虚拟机 极客

基础

2021-03-08 22:18:58 221

原创 6. 高并发 (极客)(高性能、高可用、高可扩展)

1

2021-02-26 21:04:42 1047

原创 零拷贝__

https://time.geekbang.org/column/article/232676

2021-02-26 10:07:23 124

原创 检索

导读基础有序数组:随机访问性,插入慢链表:动态修改性,查找慢,o(n)优化:链表 --》二叉检索树 --》再优化(保持平衡)–》AVL树和红黑树跳表hash(数据和链表的组合),冲突多时,链表优化,jdk8是转为红黑树缺点:空间大,范围查找不好快速判断(判断是否存在)1.1 位图1.2 布隆过滤器(有多个hash函数)倒排索引...

2021-02-22 23:13:59 118

原创 redis 极客

基础键值对保存在内存还是外存?内存的访问速度一般都在百 ns 级别磁盘的访问速度一般都在几ms 级别采用什么访问模式?socket网络(应用范围大一点)还是函数库调用(链接到自己的程序)网络请求的解析,以及数据存取的处理,是用一个线程、多个线程,还是多个进程来交互处理呢?举个例子,如果一个线程既要处理网络连接、解析请求,又要完成数据存取,一旦某一步操作发生阻塞,整个线程就会阻塞住,这就降低了系统响应速度。如果我们采用不同线程处理不同操作,那么,某个线程被阻塞时,其他线程还能正常运行。但是..

2021-02-21 17:13:09 245

原创 8. io

io,读写,指的是内存, 读是内存从文件网络等读取数据写是内存写数据到文件网络等nio

2021-02-18 11:05:19 127

原创 消息队列 _

概述优点:异步处理、削峰填谷、服务解耦缺点:延迟问题、复杂度、数据不一致基础进阶通过文档来了解开源项目https://kafka.apache.org/documentation/#intro_streamingmq主要是io密集型的系统,io包含磁盘io和网络io,这里主要是网络io技术方案异步高性能异步网络传输(netty,nio) 传统的同步网络 IO,一般采用的都是一个线程对应一个 Channel 接收数据,很难支持高并发和高吞吐量如何通过网络传输结构化的数据(序列化与

2021-02-09 14:05:06 89

原创 微服务

微服务单体-》服务化(进程内的调⽤变成远程RPC调用)-》微服务-》容器化-》devops微服务是由单⼀应⽤程序构成的⼩服务,拥有⾃⼰的进程与轻量化处理,服务依业务功能设计,以全⾃动的⽅式部署,与其他服务使⽤HTTPAPI通讯。同时,服务会使⽤最⼩规模的集中管理 (例如Docker)技术,服务可以⽤不同的编程语⾔与数据库等。什么是微服务?从2014年开始,得益于以Docker为代表的容器化技术的成熟以及DevOps⽂化的兴起,服务化的思想进⼀步演化,演变为今天我们所熟知的微服务。那么微服务相

2021-01-07 11:34:55 146

原创 数据结构和算法

数组容器能否完全替代数组:Java ArrayList无法存储基本类型,比如int、long,需要封装为Integer、Long类,而Autoboxing、Unboxing则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,就可以选用数组。数组要从0开始编号,而不是从1开始呢(减少一次计算)a[k]就表示偏移k个type_size的位置,所以计算a[k]的内存地址只需要用这个公式:a[k]_address =base_address + k * type_size但是,如.

2020-10-12 19:32:01 416 1

原创 java8

import java.util.*;import java.util.function.Predicate;import java.util.stream.Collectors;public class a { public static void main(String[] args){ List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); System.ou

2020-10-12 14:29:09 81

原创 redis set 过期时间

redis中的过期时间只能作用于key上set单个元素过期时间用 redis 的普通 set 类型实现。把时间戳 encode 进元素名称中,比如平常只是 add 一个元素 foo,现在需要 add 元素名:foo:。那么每次需要 check 这个元素 的时候先获取一下当前的时间戳跟保存的时间戳比较一下,如果已经过期,则删除它。这个方案的缺点是:如果 add 了一个元素后,一直不再访问它,那么尽管给它设置了过期时间, 那么它还是会一直存在。sorted set(每个元素拥有一个score,可以让sc

2020-09-12 10:41:03 6778

原创 分布式id

Snowfake缺点1. 时钟偏斜问题(Clock Skew)。我们知道普通的计算机系统时钟并不能保证长久的一致性,可能发生时钟回拨等问题,这就会导致时间戳不准确,进而产生重复ID(硬件时钟可能会因为各种原因发生不准的情况,网络中提供了ntp服务来做时间校准)2. 另外,序列号的可预测性是把双刃剑3. ID设计阶段需要谨慎考虑暴露出的信息,如workid暴露出机器信息4. 2038年”问题是由用于表示时间的容量不足引起的。...

2020-09-10 16:23:17 69

原创 秒杀

概述大量的并发读和并发写4 要 1 不要”数据要尽量少请求数要尽量少(页面依赖的 CSS/JavaScript、图片,以及 Ajax 请求等等都定义为“额外请求,把多个 JavaScript 文件合并成一个文件)路径要尽量短(多个相互强依赖的应用合并部署在一起,把远程过程调用(RPC)变成 JVM 内部之间的方法调用)依赖要尽量少(要完成一次用户请求必须依赖的系统或者服务)不要有单点(避免将服务的状态和机器绑定,即把服务无状态化)6. 对页面进行彻底的动静分离,使得用户秒杀时不需要刷新

2020-09-09 15:15:58 124

原创 分布式Session

粘性session(统一用户nginx代理到同一个服务器)redis集群或数据库

2020-09-07 09:36:54 48

原创 Mysql 极客

锁(全局锁、表级锁和行锁)全局锁 :是对整个数据库实例加锁,。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。数据库只读使用场景:做全库逻辑备份(不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,这个视图是逻辑不一致的)可以通过一致性读解决,一致性读是好,但前提是引擎要支持这个隔离级别。比如,对于 MyISAM 这种不支持事务的引擎表级别的锁有两种:一种是表锁(表锁的语法是 lock tables … read/w

2020-08-26 16:47:52 450 1

原创 并发编程的艺术

第一张 挑战上下文切换如何减少上下文切换无锁并发编程。多线程竞争锁时,会引起上下文切换(·CAS算法。Java的Atomic包使用CAS算法来更新数据,而不需要加锁)使用最少线程协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切死锁避免一个线程同时获取多个锁。·避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。·尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。·对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现

2020-08-12 11:05:24 240

原创 9. java知识点

异常除了error和runtimeException其他都为必检异常尽量不要捕获类似Exception这样的通用异常,而是应该捕获特定异常不要生吞(swallow)异常。这是异常处理中要特别注意的事情,因为很可能会导致非常难以诊断的诡异情况不要e.printStackTrace();,不好确认输出到哪里了Throw early, catch late(提前抛出能早点定位到问题,晚点catch,在更高层面,因为有了清晰的(业务)逻辑,往往会更清楚合适的处理方式是什么)try-catch代码段会产

2020-07-16 17:39:12 184

原创 长连接

长连接什么时候用长连接,短连接长连接多用于操作频繁,点对点的通讯(微信网页版),而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站

2020-07-14 20:15:15 114

原创 项目经验

jvm调优线上young gc和full gc频繁,平均1天2-3次,需要优化。观察老年代内存使用随着用户访问量的增大也不断增大,初步怀疑可能跟用户访问,,jmap dump内存信息,通过mat分析对象信息,发现String类型的对象占了绝大多数,通过支配树发现某个类型的字符串有很多,且一个字符串占了1.几M的内存,初步怀疑大对象所致,同时redis 有些查询比较慢,耗时1秒多优化代码,只存key,对象从数据库读,隔一段时间读取,优化,gc频率一周一次,redis查询时间也得到了优化大数据量的活动

2020-07-08 19:20:27 193

原创 IO模型_

Linux 五种IO模型

2020-06-30 17:11:01 134

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