- 博客(26)
- 资源 (7)
- 收藏
- 关注
转载 Springboot - web环境的推断
Web environment下边这段话引用自官方文档SpringApplication会尝试帮你创建正确的ApplicationContext,默认情况下会使用AnnotationConfigApplicationContext或者 AnnotationConfigEmbeddedWebApplicationContext,这取决于你开发的是否是web应用程序。判断Web environment算法是非常简单的(基于某些类的存在与否),如果有需要的话,你可以通过setWebEnvironment
2020-05-31 19:18:01 905
转载 SpringBoot打成war包,部署到Tomcat服务器
原理参考:https://blog.csdn.net/z69183787/article/details/106459630SpringBoot默认达成jar包,使用SpringBoot构想web应用,默认使用内置的Tomcat。但考虑到项目需要集群部署或者进行优化时,就需要打成war包部署到外部的Tomcat服务器中。本文所使用SpringBoot版本为:2.0.3.RELEASE一、修改pom.xml文件将默认的jar方式改为war:<groupId>com.exa...
2020-05-31 19:14:42 613
转载 Spring boot中servlet启动原理
启动过程及原理1 spring boot 应用启动运行run方法StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; FailureAnalyzers analyzers = null; configureHeadlessProperty(); SpringAppl
2020-05-31 19:12:15 737
转载 TCP四次挥手及原因
一、TCP四次挥手MSL是TCP报文里面最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。第一次挥手:A->B,A向B发出释放连接请求的报文,其中FIN(终止位) = 1,seq(序列号)=u;在A发送完之后,A的TCP客户端进入FIN-WAIT-1(终止等待1)状态。此时A还是可以进行收数据的第二次挥手:B->A:B在收到A的连接释放请求后,随即向A发送确认报文。其中ACK=1,seq=v,ack(确认号) = u +1;在B发送完毕后,B的服务器端进入...
2020-05-31 19:06:09 4958
转载 JAVA 线上故障排查完整套路
线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方面的问题。CPU 异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁 gc 以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导
2020-05-31 18:59:35 771
转载 Java agent 介绍与实战
引言在本篇文章中,我会通过几个简单的程序来说明 agent 的使用,最后在实战环节我会通过 asm 字节码框架来实现一个小工具,用于在程序运行中采集指定方法的参数和返回值。有关 asm 字节码的内容不是本文的重点,不会过多的阐述,不明白的同学可以自己 google 下。简介Java agent 提供了一种在加载字节码时,对字节码进行修改的方式。他共有两种方式执行,一种是在 main 方法执行之前,通过 premain 来实现,另一种是在程序运行中,通过 attach api 来实现。在.
2020-05-31 18:43:38 803
转载 IntelliJ IDEA通过Tomcat启动项目过程分析
Tomcat部署项目的多种方式Tomcat安装目录:${TOMCAT_HOME}1.常规的webapps下直接部署到${TOMCAT_HOME}/webapps下2.利用控制台进行部署3.外部部署修改${TOMCAT_HOME}/conf/server.xml 在<Host>标签下添加web所在的目录指定path,如: 1 <Contextpath="/xx" docBase="D:\\workspace\\xx\\target\\x..
2020-05-31 18:28:01 1281
转载 linux lsof/netstat查看进程和端口号相关命令:
在linux操作时,经常要查看运行的项目的进程和端口号,在这里总结了以下常用到的相关命令: 1.查看系统运行的java项目,并查看进程号 这个用到的命令为: ps -ef|grep java这个在命令在上一篇讲过,地址为:http://www.cnblogs.com/zjdxr-up/p/8405982.html。 2.lsof命令:根据进程pid查端口:lsof -i | grep pid其中,java表示项目运行类型,22636表示...
2020-05-26 19:44:08 781
转载 关于@webFilter使用@Order无效问题
正确设置排序方式利用FilterRegistrationBean可以设置排序顺序。那是否还有其他方式呢。有的,只是这种方案不是很优雅。这里简单说明下。先说结论:可以通过过滤器的类名进行约定排序。浅谈ServletComponentScan注解的启动方式既然遇到了,那就简单分析下使用@WebFilter和@ServletComponentScan的启动方式吧。首先我们来看下,注解@ServletComponentScan(删除了相关注解):@Target(ElementTyp
2020-05-25 18:48:47 1439
转载 ConcurrentHashMap原理分析(1.7与1.8)
- put和 get 需要执行两次Hash 多线程一起put的自旋锁问题还有 计算size 先不加锁计算3次,如果不对再给每个segment加锁计算一次,在JDK1.8版本中,对于size的计算,在put的扩容和addCount()方法就已经计算好了,直接给你(阿里)hashmap的扩容因子是0.75 原因 参考:HashMap默认加载因子为什么选择0.75?(阿里)ConcurrentHashMap 与HashMap和Hashtable 最大的不同在于:put和 get 两次Hash到达指..
2020-05-22 19:14:03 1211
转载 为什么ConcurrentHashMap的读操作不需要加锁?
https://blog.csdn.net/xxxcyzyy/article/details/85167894get()方法不加锁防止读取脏数据,这个说法本身是有问题的。concurrentHashmap在多线程公用的时,同一个线程的put方法跟gut方法如果不是在一个原子代码块里,那get不到put进入的数据是正常的。所以,concurrenthashmap的get加不加锁,根本就不是说读取到的是不是脏数据的问题,说的是“get()跟put()在多线程并发调用时候,会不会在这两个方法内部出现并发...
2020-05-22 19:07:30 1250
转载 HashMap、HashTable、CurrentHashMap
1.HashMap我们知道HashMap是线程不安全的,在多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。2.HashTableHashTable和HashMap的实现原理几乎一样,差别无非是HashTable不允许key和value为nullHashTable是线程安全的但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈.
2020-05-22 18:25:48 1482
转载 缓存一致性协议(MESI)
在目前主流的计算机中,cpu执行计算的主要流程如图所示:数据加载的流程如下:1.将程序和数据从硬盘加载到内存中2.将程序和数据从内存加载到缓存中(目前多三级缓存,数据加载顺序:L3->L2->L1)3.CPU将缓存中的数据加载到寄存器中,并进行运算4.CPU会将数据刷新回缓存,并在一定的时间周期之后刷新回内存缓存一致性协议发展背景现在的CPU基本都是多核CPU,服务器更是提供了多CPU的支持,而每个核心也都有自己独立的缓存,当多个核心同时操作多个线程对...
2020-05-21 19:47:49 1432
转载 maven release plugin插件
1.打包版本区别SNAPSHOT 快照版本(开发阶段,不稳定,容易出现bug)RELEASE 正式版本(外部依赖使用阶段,稳定,很少出现bug)Tag :标记每次代码提交的版本(比较稳定,类似分支)2.release plugin 插件的作用①检查本地有无未提交的代码②检查项目是否有快照版本依赖③执行单元测试,生成API文档④在本地和远程库的GIT中打上对应版本的tag⑤将SNAPSHOT版本升级为release版本,发布release版本到指定私服上⑥修改pom版本为新
2020-05-21 16:43:16 898
转载 堆排序应用-优先级队列PriorityQueue源码分析
1. 回顾在上一篇文章中分享了堆这种数据结构,同时提到,堆可以用来对数据排序,也可以用来解决Top N、定时任务、优先级队列等问题,今天要分享的是Java中优先级队列PriorityQueue的源码实现,看看堆在Java中的实际应用。需要说明的是,本文与上篇文章:「重温《数据结构与算法》之堆与堆排序」密切相关。2. PriorityQueue优先级队列有两个常用的操作:向队列中添加元素、取出元素,这两个操作的方法为「add(E e)和poll()」,接下来将围绕这两个方法的源码展开。Pri.
2020-05-20 10:53:00 742
转载 重温《数据结构与算法》之堆与堆排序
1. 堆二叉树可以被细分为普通二叉树、满二叉树、完全二叉树,而今天所分享的堆这种数据结构就是一种完全二叉树。堆中的每个结点的值要么都大于左右子结点的值,要么都小于左右子结点的值。前者形成的是大顶堆,即堆顶元素是最大的;后者形成的是小顶堆,即堆顶元素是最小的。如下图所示,分表是一个大顶堆和小顶堆。堆❝完全二叉树的特点是:最后一层的叶子结点靠左排列,从根结点到倒数第二层结点,是一颗满二叉树。通常储存二叉树这种数据结构的方法有链式存储和顺序存储,链式存储就是通过指针来维护左右子结点的关系,而
2020-05-19 16:08:46 733 1
转载 Maven 父pom中dependencyManagement版本优先级高于传递依赖版本
当使用了传递依赖,也就是使用了没有显示声明的依赖时,如果继承的<dependencyManagement/>中声明了使用的传递依赖的版本,那么最终使用的依赖是<dependencyManagement/>中声明的版本。用Spring举一个栗子:1.mvn dependency:tree先看下项目依赖的基础组件使用的Spring版本。可以看到基础组件使用的Spring版本为3.1.3,不能lambda表达式(被坑过)。2.mvn dependency:an.
2020-05-19 14:53:56 10476 2
转载 Redis SortedSet 中 score 的精度问题
一、问题发现通过 jedis 往 sortedset 中添加了个成员,并且设定了一个Double 类型的分数时,精度出现了问题测试代码如下:@Testpublic void zadd(){ jedis.zadd("test:cli", 13.36, "mb1");}如果用 jedis 的 api 来获取 score 的话一切正常@Testpublic void zscore(){ System.out.println(jedis.zscore("test:cli.
2020-05-18 12:16:42 2123
转载 架构不得不知道的限流
限流简介现在说到高可用系统,都会说到高可用的保护手段:缓存、降级和限流,本博文就主要说说限流。限流是流量限速(Rate Limit)的简称,是指只允许指定的事件进入系统,超过的部分将被拒绝服务、排队或等待、降级等处理。对于server服务而言,限流为了保证一部分的请求流量可以得到正常的响应,总好过全部的请求都不能得到响应,甚至导致系统雪崩。限流与熔断经常被人弄混,博主认为它们最大的区别在于限流主要在server实现,而熔断主要在client实现,当然了,一个服务既可以充当server也可以充当clien
2020-05-18 11:26:34 915
转载 Guava LoadingCache不能缓存null值
测试的时候发现项目中的LoadingCache没有刷新,但是明明调用了refresh方法了。后来发现LoadingCache是不支持缓存null值的,如果load回调方法返回null,则在get的时候会抛出异常。通过几个例子开看这个问题:public void test_loadNull() { LoadingCache<String, String> stringCache = CacheBuilder.newBuilder() .maximumSiz
2020-05-14 15:01:58 2634
转载 浅谈SPA、SEO、SSR
前后端分离算是最近Web开发的大趋势了,目前已经有大量的公司使用了前后端分离的开发方式。那我们就来大概谈谈前后端分离开发中必须要了解和接触的几个概念:SPA、SEO和SSR。在谈这几个概念之前,先来聊聊我理解的前后端分离。我理解的前后端分离背景最开始接触Web前后端大概是一年多前,那个时候打算参加一个比赛,因为没人写后端和Web前端,所以就开始自己学,然后边学边做。另外当时我们的项目还有移动端,所以后端除了提供数据渲染Web前端的页面以外还得给移动端提供接口,实际上两端的数据大多都是相同的。传
2020-05-13 18:15:51 975
转载 十分钟读懂AES加密算法
http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html一. AES对称加密:AES加密 分组二.分组密码的填充分组密码的填充e.g.:...
2020-05-13 11:06:05 1123
转载 MySQL-CPU消耗过大的优化方案
谁在消耗cpu?用户+系统+IO等待+软硬中断+空闲祸首是谁?1、用户 用户空间CPU消耗,各种逻辑运算2、IO等待 等待IO请求的完成产生影响用户和IO等待消耗了大部分cpu吞吐量下降(tps) 查询响应时间增加 慢查询数增加 对mysql的并发陡增,也会产生上诉影响如何减少CPU消耗?1、减少等待减少IO量 ,SQL/index,使用合适的索引减少扫描的行数(需平衡索引的正收益和维护开销,空间换时间)提升IO处理能力, 加cache/加磁盘/SS
2020-05-09 17:28:08 661
转载 最短路径问题——迪杰斯特拉算法(Dijkstra)
前段时间看到一篇文章,里面提到了统治世界的十大算法,其中之一就是迪杰斯特拉算法(Dijkstra),该算法主要解决的”最短路径“这一类问题。说法虽然夸张了点,但它在实际生活中确实应用广泛,例如地图软件等,大部分游戏中自动寻路等功能,使用到的 A*搜索算法也是基于迪杰斯特拉算法优化而来。那么迪杰斯特拉算法是如何实现的呢?假如我们现在有如下一个有向图,图中有 6 个顶点,编号分别为 1~6,带有箭头的直线表示的是能从一个顶点到达另外一个顶点,直线上的数字表示的是两个顶点之间的距离,现在求顶点 1 到顶点 6
2020-05-09 14:33:04 1148
转载 @Autowired原理详解 :标识构造函数
在一个类中定义一个属性,正常情况下需要在此类中有对此属性赋值的代码,如setter方法,或者在构造函数中赋值,因此类和属性之间的关系已经确定下来了,类和属性间就有了一定的耦合关系。而IOC的精髓就是解耦,类中没有显式的对属性的赋值代码,同时属性的实际类型和值在运行时有系统动态的赋值,Spring对IOC做了很大的扩展,使用者可以很灵活的控制注入的对象类型及值。Spring内IOC的最直接体现就...
2020-05-08 10:18:27 2272
转载 TPS&QPS的估算
概念PV(Page View):页面访问量,每次用户访问或者刷新页面都会被计算在内。QPS(Query Per Second):每秒查询数,每秒系统能够处理的查询请求次数。TPS(Transactions Per Second):每秒事务数,每秒系统能够处理的事务次数。TPS与QPS是有区别的事务表示客户端发起请求到收到服务端最终响应的整个过程,这是一个TPS而在这个TPS...
2020-05-07 16:29:54 3573
Zookeeper资源文件
2017-03-20
Zookeeper基础知识
2017-03-20
Zookeeper初识
2017-03-20
使用exe4j 制作java启动程序的 等候界面
2014-06-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人