java
文章平均质量分 81
码农的世界,你不懂
这个作者很懒,什么都没留下…
展开
-
分布式追踪 & APM 系统 SkyWalking 源码分析
1. 概述本文主要分享 SkyWalking DataCarrier 异步处理库。基于生产者消费者的模式,大体结构如下图:实际项目中,没有 Producer 这个类。所以本文提到的 Producer ,更多的是一种角色。下面我们来看看整体的项目结构,如下图所示 :2. bufferorg.skywalking.apm.commons.datacarrier.buffer 包,主要包含 Channels 、Buffer 两个类。Channels 是 Buffer 数组的封装。2.1转载 2021-07-04 14:29:04 · 436 阅读 · 0 评论 -
DBUtils框架的使用(上)
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。jar包下载地址:链接:https://pan.baidu.com/s/1BKtq_VoBw52qyIJr6c_CZg提取码:skrf复制这段内容后打开百度网盘手机App,操作更方便哦API介绍:org.apache.com转载 2020-05-29 10:01:45 · 216 阅读 · 0 评论 -
DBUtils框架的使用(下)
通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查询的时候需要实现ResultSetHandler接口来将结果集封装成对象。可以通过自己实现接口,但很显然,我们应该使用DBUtils工具包提供的实现类来实现封装。在DBUtils框架中,共提供了九个ResultSetHandler的实现类。ArrayHandler:把结果集中的第一行数据转成对象数组。 ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。 BeanHand原创 2020-05-29 09:57:49 · 160 阅读 · 0 评论 -
Java中的static关键字
java中的static关键字1. 概述假设有一个学生类,它的数据成员有姓名、年龄、学号、教室,对于在同一个班的同学来讲,每个同学的姓名、年龄、学号或许都是不一样的,但是教室肯定是一样的,如果有40个同学,我有必要把40个同学的教室名都设置一遍吗?没必要,教室名是40个同学共享的一个属性,它不同于名字、学号这些,当我们给教室这个变量前面加上static后,它就是一个共享的属性了,我们只需把共享的属性设置一遍,所有的对象就会共享到这一设置。public class Student{ privat..原创 2020-05-29 09:35:06 · 168 阅读 · 0 评论 -
对于java性能优化的这10个细节你知道吗?
1. 多线程在未发生线程安全前提下应尽量使用HashMap、ArrayListHashTable、Vector等使用了同步机制,降低了性能。2. 尽量合理的创建HashMap当你要创建一个比较大的hashMap时,充分利用这个构造函数public HashMap(int initialCapacity, float loadFactor);避免HashMap多次进行了hash重构,扩容是一件很耗费性能的事,在默认中initialCapacity只有16,而loadFactor是 0.75,需要多大的原创 2020-05-28 10:43:27 · 140 阅读 · 0 评论 -
单点登录原理
1、什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一, SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。2、单点登录的好处 使用“单点登录”整合后,只需要登录一次就可以进入多个系统,而不需要重新登录,这不仅仅带来了更好的用户体验,更重要的是降低了安全的风险和管理的消耗 在面向服务的架构中,服务和服务之间,程序和程序之间的通讯大量存在,服务...原创 2020-05-28 10:30:14 · 828 阅读 · 0 评论 -
红黑树原理
我们都听过平衡二叉树(AVLTree),了解到AVL树的性质,其实平衡二叉树最大的作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树的效率就是高在这个地方。如果在AVL树中插入或删除节点后,使得高度之差大于1。此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树;为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小. 这个时候就有人开始思考,并且提出了红黑树的理论,那么红黑树到底比AVL树好在哪里?红黑树与AVL树的比较:1.A原创 2020-05-28 10:04:05 · 194 阅读 · 0 评论 -
JAVA基础之泛型
泛型,就是允许在定义类、接口、方法时使用类型形参,在声明变量、创建对象、调用方法时再传入实际的类型参数。像List代表了只能存放String类型的对象的List集合。在java中这样用://创建一个只能存放String类型的List集合List<String> a=new ArrayList<>();想知道为什么使用泛型,我们可以看看没有泛型之前,是怎么操作集合的。public static void main(String[] args){//定义集合Map map=new...原创 2020-05-28 09:48:40 · 130 阅读 · 0 评论 -
Redis分布式锁的N种姿势
Redis几种架构Redis发展到现在,几种常见的部署架构有:单机模式; 主从模式; 哨兵模式; 集群模式;我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意的是,只有充分了解普通分布式锁是如何实现的,才能更好的了解Redlock分布式锁的实现,因为Redlock分布式锁的实现完全基于普通分布式锁。普通分布式锁Redis普通分布式锁原理这个大家基本上都了解,本文不打算再过多的介绍,上一篇文章《Redis分布式锁最牛逼的实现》也讲的很细,并且也说到了几个重要的注意点。如原创 2020-05-28 09:37:13 · 197 阅读 · 0 评论 -
字段类型与合理的选择字段类型
字段类型数值MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。INT 在 MySQL 中支持的 5 个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。MySQL原创 2020-05-28 09:34:13 · 573 阅读 · 0 评论 -
java filter 使用介绍
filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:一、使浏览器不缓存页面的过滤器Java代码import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/*** 用于的使 Browser 不缓存页面的过滤器*/public class ForceNoCacheFilter implements Fi..原创 2020-05-27 10:02:00 · 148 阅读 · 0 评论 -
java代码规范
通过java代码规范来优化程序,优化内存使用情况,防止内存泄露可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我原创 2020-05-27 09:44:53 · 85 阅读 · 0 评论 -
jdbctemplate简介】
JdbcTemplate简介 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。 JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了一下事务和异常控制JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执.原创 2020-05-27 09:40:45 · 296 阅读 · 0 评论 -
java代码规范
通过java代码规范来优化程序,优化内存使用情况,防止内存泄露可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我原创 2020-05-27 09:30:31 · 133 阅读 · 0 评论 -
线程池入门
1.阻塞队列 体系结构 -Collection -Queue - BlockQueue 重要的实现类 ...原创 2020-05-27 09:21:33 · 81 阅读 · 0 评论 -
java中队列的介绍和使用
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。Queue的实现1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口 内置的不阻塞队列: PriorityQueue 和 ConcurrentLinkedQueue PriorityQueue 和 Concurre原创 2020-05-26 09:39:02 · 141 阅读 · 0 评论 -
java读写Properties属性文件公用方法
Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。像Python支持的配置文件是.ini文件,同样,它也有自己读取配置文件的类ConfigParse,方便程序员或用户通过该类的方法来修改.ini配置文件。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”原创 2020-05-26 09:30:54 · 143 阅读 · 0 评论 -
jdbcTemplate使用方法总结
1、使用JdbcTemplate的execute()方法执行SQL语句[Java]纯文本查看复制代码? 1 jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))"); 2、如果是UPDATE或INSERT,可以用update()方法。[Java]纯文本查看复制代码? 1 2 ...原创 2020-05-26 09:27:09 · 328 阅读 · 0 评论 -
API 网关从入门到放弃
API 网关从入门到放弃假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等网关由于对接很多种不同的协议,因此可能需要实现很多种调用方式,比如HTTP、Dubbo等,基于性能原因,最好都采用异步的方式,而Http、Dubbo都是支持异步的,比如apache就提供了基于NIO实现的异步HTTP客户端。因为网关会涉及到很多异步调用,比如拦截器、HTTP客户端、dubbo、redis等,因此需要考虑下异步调用的方式,如果基于回调或者future的话,代码嵌套会很深,.原创 2020-05-26 09:19:31 · 116 阅读 · 0 评论 -
23种设计模式-责任链模式(17)
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。介绍意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负原创 2020-05-26 09:03:28 · 111 阅读 · 0 评论 -
23种设计模式-迭代器模式(16)
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。介绍意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个整合对象。何时使用:遍历一个聚合对象。如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。关键代码:定义接口:hasNext, next。应用实例:JAVA 中的 iterator。优点:原创 2020-05-26 09:00:11 · 87 阅读 · 0 评论 -
JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子。同样,根据摩尔定律,我们知道单核CPU的主频不可能无限制的增长,要想很多的提升新能,需要多个处理器协同原创 2020-05-26 08:55:22 · 138 阅读 · 0 评论 -
线程生命周期
在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。当线程start后,它不能一直"独占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。下面分别来分析这五种状态:一 新建[Java]纯文本查看复制代码? 1 2 3 4 5 6 7 public class...原创 2020-05-25 09:45:21 · 97 阅读 · 0 评论 -
Java描述设计模式
一、生活场景1、文件系统下图是常见的计算机文件系统的一部分。文件系统是一个树结构,树上长有节点。树的节点有两种:树枝节点即文件夹,有内部树结构,在图中涂有颜色;树叶节点另一种是文件,即树叶节点,没有内部树结构。2、打印文件树结构publicclass C01_InScene { public static void main(String[] args) { File file =newFile("F:\\tree") ; file...原创 2020-05-25 09:31:18 · 117 阅读 · 0 评论 -
Java练习——扑克牌发牌器
实现思路- 构建一张扑克牌 - 构建一套扑克牌 - 测试构建一张扑克牌[url=][/url]/***@author冬冬* 定义一个单张扑克牌类* 有花型,大小*/publicclassCard {privateString flower;//花型privateintdaxiao;//点数/**构造方法*@paramflower*@paramdaxiao*/publicCard(String flower,intdaxiao) {this.flower = f...原创 2020-05-25 09:16:24 · 268 阅读 · 0 评论 -
类加载机制
1.JVM的类加载机制主要有如下3种。全盘负责:所谓全盘负责,就是当一个类加载器负责加载某个Class时,该Class所依赖和引用其他Class也将由该类加载器负责载入,除非显示使用另外一个类加载器来载入。双亲委派:所谓的双亲委派,则是先让父类加载器试图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父加载器,依次递归,如果父加载器可以完成类加载任务,就成功返回;只有父加载器无法完成此加载任务时,才原创 2020-05-25 09:07:55 · 114 阅读 · 0 评论 -
java并发编程的艺术
文章目录1. JAVA并发机制的底层实现原理1. 锁的状态2. 原子操作的实现原理2. java内存模型1. 基础2. 重排序4. JAVA并发编程基础1. Synchronized底层指令2. Thread.join5. JAVA中的锁1. AbstractQueuedSynchronized(AQS, 同步器)2. LockSupport3. Condition6. JAVA并发容器和框架1. ConcurrentHashMap2. ConcurrentLinkedQue原创 2020-05-22 10:02:38 · 130 阅读 · 0 评论 -
Java相对路径读取文件
1、在Java开发工具的project中使用相对路径在project中,相对路径的根目录是project的根文件夹,在此就是repathtest文件夹了。创建文件的写法是:[Java]纯文本查看复制代码? 1 File f = new File("src/com/lavasoft/res/a.txt"); [Java]纯文本查看复制代码? 1 File f =...原创 2020-05-22 09:58:45 · 128 阅读 · 0 评论 -
java并发编程的艺术
文章目录1. JAVA并发机制的底层实现原理1. 锁的状态2. 原子操作的实现原理2. java内存模型1. 基础2. 重排序4. JAVA并发编程基础1. Synchronized底层指令2. Thread.join5. JAVA中的锁1. AbstractQueuedSynchronized(AQS, 同步器)2. LockSupport3. Condition6. JAVA并发容器和框架1. ConcurrentHashMap2. ConcurrentLinkedQue原创 2020-05-22 09:49:05 · 89 阅读 · 0 评论 -
Java相对路径读取文件
1、在Java开发工具的project中使用相对路径在project中,相对路径的根目录是project的根文件夹,在此就是repathtest文件夹了。创建文件的写法是:[Java]纯文本查看复制代码? 1 File f = new File("src/com/lavasoft/res/a.txt"); [Java]纯文本查看复制代码? 1 File f =...原创 2020-05-22 09:45:14 · 235 阅读 · 0 评论 -
写代码时应当牢记的事情
在如今这个时代,每个人都在努力提升资源能力。在Web应用程序方面,我们有Spring、Play和Struts等框架,这些框架可以帮助我们构建具有可扩展性和可管理性的软件。这些框架提供了许多样板代码,所以你无需在应用程序中再写这些代码。不过,写代码并不难,但是写高质量的代码却很难。作为开发人员,在日常工作中我们也应该遵循相同的基本原则。我们应该将工作完成得尽善尽美,不能将任何错误留给客户。很多时候,迫于压力开发人员会编写管理不善或复杂的代码。为了编写高质量的代码,有一条经验法则是...原创 2020-05-22 09:35:51 · 154 阅读 · 0 评论 -
JavaBean类中的基本类型属性
众所周知,我们在使用Hibernate、Mybatis等框架一系列的ORM框架的时候,我们都需要定义JavaBean类,用来和数据库的字段一一对应。但是当我们定义数值或者小数等能用基本类型表示的数据的时候,我们往往会将其定义为基本类型的包装类。例如下图很多程序员,都知道这样去做,但是并不知道具体的原因。下面我从业务和技术层面去分析原因。首先从业务层面来看: 以基本类型的int来举例。 Integer比较明显的一个好处就是 Integer比int可以多表示一个null, 你...原创 2020-05-21 09:53:45 · 445 阅读 · 0 评论 -
sql语句总结
一、基础部分1、创建数据库,删除数据库[SQL]纯文本查看复制代码? 1 2 CREATE DATABASE database-name drop database dbname 2、备份sql server[SQL]纯文本查看复制代码? 1 2 3 4 5 --- 创建 备份数据的 device U...原创 2020-05-21 09:48:25 · 131 阅读 · 0 评论 -
上海部分公司面经二(连载)
为各位收录上海部分公司面经,连载持续更新。本期收录网易、平安壹钱包、陆金所面经。网易面经:1,B树索引效率快,原理,直接让我画图,跟hash索引的原理对比。hash算法跟一致性hash区别?2,问我k8snodeport网络怎么流转出去,包怎么转出来的3,redis内存模型??4,浏览器内部拒绝跨域访问的原理是啥5,servelet内部实现原理6,dubbo可靠通信原理,tcp跟udp通信的原理和不同7,k8s负载均衡算法怎么做的8,keepalive的vip怎...原创 2020-05-21 09:40:22 · 308 阅读 · 0 评论 -
线程死锁分析
什么是线程死锁?死锁是指两个或者两个以上的线程在执行过程中,因为争夺资源而造成的互相等待的现象。如果没有外力作用下,这些线程会一直互相等待而无法继续运行下去。比如说线程A持有资源1,等待资源2线程B持有资源2,等待资源1且双方都不愿意放弃自己所持有的资源死锁的四个条件:1.互斥条件:资源只能同时被一个线程占用,如果此时有其他线程想要获取资源,则必须等待,直到占有资源的线程释放该资源2.请求并持有条件:指一个线程已经持有了至少一个资源,但是又提出了新的资源请求,而新资源已被其他线程占用,所以当原创 2020-05-21 09:24:51 · 99 阅读 · 0 评论 -
Spring Boot整合Rabbit MQ
先引入依赖:[XML]纯文本查看复制代码? 1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ...原创 2020-05-21 09:21:26 · 122 阅读 · 0 评论 -
面试必备乐观锁和悲观锁1
何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁( 共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前原创 2020-05-21 09:05:26 · 104 阅读 · 0 评论 -
常见的设计模式和解释
1. 请列举出在 JDK中几个常用的设计模式?单例模式(Singletonpattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如Boolean,像 Boolean.valueOf,观察者模式(Observer pattern)被用于Swing和很多的事件监听中。装饰器设计模式(Decoratordesign pattern)被用于多个 Java IO 类中。2. 什么是设计模式?你是否在你的代码里面使...原创 2020-05-20 10:14:31 · 119 阅读 · 0 评论 -
分布式锁详解
并发编程的锁机制:synchronized和lock。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线程结束同步代码块取消标记后再去尝试设置标记。 分布式环境下,数据一致性问题一直是一个比...原创 2020-05-20 10:11:23 · 166 阅读 · 0 评论 -
单点登录实现
简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘宝与天猫、新浪微博与新浪博客等都用到了这个技术。 原理 单点登录 有一个独立的认证中心,只有认证中心才能接受用户的用户名和密码等信息进行认证,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,当用户提供的用...原创 2020-05-20 10:03:47 · 155 阅读 · 0 评论