- 博客(34)
- 资源 (3)
- 收藏
- 关注
原创 常见限流算法
package com.baiwang.customize.common.utils;import java.time.LocalTime;import java.util.concurrent.atomic.AtomicInteger;/** * Created in 2022/3/17 */public class limiterUtil { /** * 固定窗口算法 * 计算器 */ static class RateLimiterSi.
2022-03-17 13:57:42 119
原创 (学习笔记) 开发中常见的异常类整理
异常,是Java语言健壮性的一个重要体现。Java把异常当作对象来处理,并定义一个基类Throwable作为所有异常的超类。Thorwable类所有异常和错误的超类有两个子类Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。下面将详细讲述这些异常之间的区别
2022-03-10 14:20:01 243
原创 闻而色变的各种病毒
生物危险度等级:(1级~4级),国际上以BSL一1、BSL一2、BSL一3、BSL一4。BSL-1代表病原体:麻疹病毒、腮腺炎病毒、枯草杆菌、大肠杆菌、水痘BSL-2代表病原体:B型肝炎、C型肝炎、流感病毒、莱姆病、沙门氏杆菌BSL-3代表病原体:炭疽芽孢杆菌、鼠疫杆菌、结核分枝杆菌、狂犬病毒、SARS、HIV、西尼罗河脑炎、结核菌、黄热病、新冠病毒BSL-4代表病原体:埃博拉病毒、马尔堡病毒、拉沙病毒、伊波拉病毒、汉他病毒、拉萨热等出血热疾
2022-03-10 12:01:25 2098
原创 (微服务) Dubbo服务治理
1.dubbo的底层是依赖spring的。2.dubbo的作用就是给消费端提供接口。3.dubbo各个节点说明:Provider ----------------------------- 暴露服务的服务提供方Consumer----------------------------- 调用远程服务的服务消费方Registry ----------------------------- 服务注...
2022-03-01 16:12:10 1174
原创 (多线程)并发问题记录
1.Hash扩容算法问题: a.多线程put操作,get会死循环,这个可以优化掉比如扩容的时候新开一个数组,不要使用共享的那个数组 b.多线程put可能导致get取值错误 问题分析: hash冲突一般是采用链式结构来保存冲突的值,如果在遍历这个链表时,它本身是这样的 1->2->3->4->null 遍历到3本身应该是Null的,这时候刚好有人把这个null给计算出了值,null=>1->3,这下就完了,原来3要指向nul...
2022-02-22 15:28:54 287
原创 (学习笔记)逻辑练习题(一)
问题:两个字符串倒序求和例如:字符串a = "123",字符串b = "234";倒序之后: a="321",b="432";将结果转int 求和:753 ,结果输出为753。请列举出所有可能出现的情况。问题分析:1.字符串可能为空,为null,转换会报异常。2.字符串可能为负数,可能带小数,可能非数字。3.代码规范+优雅我的解决方案: public static void main(String[] args) { String s
2022-02-22 11:25:57 244
原创 (学习笔记)JAVA开发需要掌握哪些技术?
据统计,目前从业软件开发的人数近2700万,其中大约500万使用JAVA作为主要开发语言。java代表的仅仅是一种后端的编程语言,但仅仅学会这一编程语言在工作中是不够的。比如数据库知识,服务器相关知识等等。再进阶到高并发解决方案,分布式系统搭建,性能调优等等。。。这中间每一项都包含了一个体系的知识,而这些年的工作经验告诉我,都掌握是不可能的,技术在不断创新和迭代,变牛逼的方式只有一个,比大多人会的更多!你懂吧?也是最近有几个学弟问我,想学习java开发需要掌握哪些开发技术呢?正好今天有空,就
2022-02-17 18:10:48 8182 1
原创 MyBatis工作原理分析(一)
向一个springboot项目中整合mybatis很简单,一般只需要两步:1.引入mybatis依赖<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version></dependency>
2022-02-17 16:19:03 682
原创 了解MyBatis框架
MyBatisMyBatis前身是iBatis,最初侧重于码软件开发,后续发展称为一款基于java的持久层框架。MyBatis可以使用简单的XML或者注解进行映射和配置,通过将参数映射到配置的SQL最终解析为执行的SQL语句,查询后将SQl结果集映射成java对象返回。MyBatis提供的持久层框架包括SQL Maps(Mapper)和Data Access Objects(DAO),相对于Hibernate而言它提供的是一种把自动化的ORM实现。MyBatis中一级缓存会默认启用(本地缓存)且不受
2022-02-17 15:07:39 474
原创 (GC算法)JVM垃圾回收机制 - CMS
CMS是基于标记-清除算法的,收集的时候分为4个步骤: 初始标记 并发标记 重新标记 并发清除 初始标记初始标记仅仅只是标记一下GC Roots能直接关联到的对象,所以速度很快。比如下图,这边的GC Roots只用了虚拟机栈为例。两个虚拟机栈分表创建了对象OBJ_A1和OBJ_B1,他们也各有自己的其他引用,在这个阶段,他只会标记OBJ_A1和OBJ_B1,其他的引用是不标记的,所以尽管这个阶段有STW,但是标记的数量少,时间很快,基本不影响。并发标记
2022-02-17 11:27:00 361
原创 (GC算法) JVM垃圾回收机制 - G1
使用G1收集器时,java堆的内存会划分为多个大小相等的独立区域(Region),Region中也有新生代和老年代的概念,但是新生代和老年代不再是物理隔离的,它们都是一部分Region(不需要连续)的集合.如下图所示:粉色的代表新生代,没有字母的是eden,有s的是survivor ,老年代是浅蓝的O,还有一个H是humongous,也是老年代。大对象直接进入老年代,这个humongous就是存储大对象的,也就是说如果对象内存大小大于Region的一半大小,那就会给一个专门的Region存放,如果对象大
2022-02-17 11:24:18 507
原创 (内存模型)JVM堆内存分配机制
对象优先在Eden分配堆内存分为新生代和老年代,新生代是用于存放使用后准备被回收的对象,老年代是用于存放生命周期比较长的对象。大部分我们创建的对象,都属于生命周期比较短的,所以会存放在新生代。新生代又细分Eden空间、From Survivor空间、To Survivor空间,我们创建的对象,对象优先在Eden分配。随着对象的创建,Eden剩余内存空间越来越少,就会触发Minor GC,于是Eden的存活对象会放入From Survivor空间。Minor GC后,新对象..
2022-02-17 11:21:41 286
原创 (微服务)负载均衡Nginx
简介:一种高性能的HTTP和反向代理服务器。特点:占用内存少、并发能力强理想并发峰值:50000个正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务器称为正向代理。反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器选择目标服务器获取数据,再返回到客户端。对外暴露的是代理服务器地址,隐藏目标服务器的真实ip地址。负载均衡:客户端发送多个请求到服务器后,有一些可能要与数据库进行交
2022-02-16 17:15:20 860
原创 (学习笔记)读取PDF/OFD文件
如何将pdf文件按页分割并解析内容1.创建文件页存储对象@Getter@Setter@ToStringpublic class DivisionPDFResult { /** * 页码 */ public int pageIndex; /** * 页内容字符串 */ public String text; /** * 是否成功 */ public Boolean isOk;}
2022-02-16 16:23:13 1571
原创 开发中常见的架构模式
1.分层架构分层架构是较为常见的单体架构之一。该模式的基本思想是将应用程序的逻辑划分为若干层,每层都封装的特定的角色。例如:持久层负责应用程序与数据库引擎之间的通信;业务层负责处理应用程序中具体的业务逻辑等等。2.驱动架构驱动架构的思想是将应用逻辑解耦为单一用途的事件处理组件,以异步方式接收和处理事件。这是一种较为收欢迎的分布式异步架构模型,以高扩展性和适应性出名。3.微内核架构(插件架构) 微内核架构中的...
2022-02-16 16:09:10 4742
转载 看到一篇非常好的文章,转载一下
首先,让我来做一个简短的自我介绍:我叫 Daniel,今年 28 岁,是一名软件工程师。我从 13 岁起就开始学习编程。在工作了八年之后,我在 2019 年进入了亚马逊,并担任 SDE2。大约两年零三个月后,也就是 2021 年,我晋升到了亚马逊的高级 SDE。在本文中,我将与大家分享我在职业生涯中所学到的一些经验,这些经验是我在之前就希望能够学到的。这些经验承载了我的个人经历和个人信仰。但愿这会对你有所帮助。1. 尽管编程很酷,但如果能支持其他同事,你将会取得更大的成就。编程很酷,非常
2022-02-10 18:05:29 127
原创 简单学习架构图
一,架构图分类1.场景视图用于描述系统的参与者和功能用例之间的关系,反映系统的最终需求和交互设计,通常由例图表示。2.逻辑视图用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系统如何构建的过程,通常由UML的组件图和类图表示。3.物理视图用于描述系统软件到物理硬件的映射关系,反映出系统的组件如何部署到计算机节点上,用于知道软件系统的部署实施过程。4.处理流程视图用于描述软件组件之间的通信时序,数据的输入输出,反映系统的功能流程与数据流通过.
2022-02-10 18:03:40 1612
原创 高级数据结构
1.跳跃表2.红黑树3.B树4.B+树5.B*树6.Trie树Trie(读作try)树又称字典树、单词查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。Trie的核心思想是空间换时间:利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie树的基本性质:每个节点最多包含R个子节
2022-02-10 16:46:44 1102
原创 (数据库)数据库分类
1.面向操作的关系型数据库典型性应用领域:ERP,CRM,信用卡交易,中小型电商数据储存方法:表格流行厂商:Oracle Database,Microsoft SQLServer,IBM DB2,EnterpriseDB(PostgreSQL),MySQL优点:完善的生态环境保护,事务保证/数据一致性缺点:严苛的数据模型界定,数据库拓展限制,和非结构型的结合应用较难。2.面向数据分析的关系型数据库典型性应用领域:数据仓库,商务智能,数据科学研究数据储存方法:表格流行厂商:Oracle E
2022-02-10 16:45:30 1843
原创 (数据库)oracle与mysql的区别
一、并发性 并发性是数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。 mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。 oracle:oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与...
2022-02-10 16:44:45 258
原创 (学习笔记)for循环和forEach性能差异对比
1.写法比较第一种:普通for循环格式:for(表达式1;循环条件;表达式2){ ...循环体}第二种:增强for循环格式:for(类 类的别名 : 类的集合){ ...循环体}第三种:iterator 格式:Iterator<Integer> iterator = arrayList.iterator();while (iterator.hasNext()) { iterator.next();}基于增强for实现的扩展写法 forEach:...
2022-02-10 16:43:22 10397
原创 JDK各个版本的新特性:
jdk5: 1.自动拆、装箱 int -->Integer double --> Double long --> Long char --> Character float --> Float boolean --> Boolean short --> Short byte -- > Byte 2.枚举 ...
2022-02-10 16:03:02 567
ELK 套件(ElasticSearch+Logstash+Kibana) TIG 套件(Telegraf+InfluxD
2022-03-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人