- 博客(144)
- 收藏
- 关注
原创 MAC干净卸载IDEA
如果没有卸载软件,打开【启动台】,找到IDEA的程序,用鼠标左键一直按住,直到程序左上角出现【小叉号】,然后点击【小叉号】,就可以卸载了。版权声明:本文为CSDN博主「renkai721」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/renkai721/article/details/125778983。接下来,打开【终端】,直接执行下面的4条命令,一次执行一条。上面的4条命令都执行完了,就可以重新安装了。
2023-04-06 15:26:33 1177
转载 JAVA8十大新特性详解(精编)
一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); }}Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个ca
2020-07-13 06:18:58 250
转载 Google的CacheBuilder缓存
1:refreshAfterWriteGuava Cache特性:对于同一个key,只让一个请求回源load数据,其他线程阻塞等待结果这种情况:如果缓存过期,恰好有多个线程读取同一个key的值,那么guava只允许一个线程去加载数据,其余线程阻塞。这虽然可以防止大量请求穿透缓存,但是效率低下。使用refreshAfterWrite可以做到:只阻塞加载数据的线程,其余线程返回旧数据。2:之前常用 ConcurrentMap来做缓存,那它们有什么区别呢?Guava Cache与ConcurrentMap很
2020-06-23 10:08:59 622
原创 mac配置maven环境变量失效,ITerm终端关闭就会失效
前提:我在.bash_profile文件中配置了maven的环境变量,如下:export M2_HOME=/Users/mac/ProgramFiles/apache-maven-3.6.1export PATH=$PATH:$M2_HOME/bin然后每次终端关闭后再打开需要手动执行source .bash_profile而后才生效,这样太麻烦了,我意识到该环境变量的设置只针对当前session有效,然后我将maven环境变量的配置配置在了:第一种方案:vim /etc/profile
2020-06-17 18:05:19 3238 1
转载 Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。我之前的HTTP开发是用apache的HttpClient开发,代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,稍微截个图,这是我封装好的一个post请求工具:Springboot – 用更优雅的方式发HTTP请求(RestTemplate详解)本教程将带领大家实现Spring生态内RestTemplate的Get请求和Post
2020-05-11 16:02:21 1234
原创 解析sql语句工具
说明:解解析sql语句工具析工具可以解析出sql语句 语法、库表、条件 下面示例只是解析 库表的示例,其他解析需要再分析解析规范使用:一、mvaen引用<!--解析sql语句使用jar包 start--><dependency> <groupId>org.apache.hive</groupId> <artifactId>hi...
2020-05-02 17:45:00 2706 1
原创 使用 Maven Profile 和 Filtering 打各种环境的包
每个项目都会有多套运行环境(开发,测试,正式等等),不同的环境配置也不尽相同(如jdbc.url),借助Jenkins和自动部署提供的便利,我们可以把不同环境的配置文件单独抽离出来,打完包后用对应环境的配置文件替换打包后的文件,其实maven已经给我们提供了替换方案:profile + filteringFilteringFiltering 是 maven 的 resource 插件 提供的功...
2020-05-02 17:40:10 229
原创 Dump文件分析
Dump文件分析本文主要介绍Dump文件结构,理解Dump文件对于分析线程高占用、死锁、内存溢出等高级问题有非常重要的指导意义。什么是Dump文件Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给程序编写人员调试程序用的,这种文件必须用专用工具软件打开。如何生成Dump文件使用命令:jstack pid可以查看到当前运行的java进...
2020-05-02 17:28:32 1333
原创 The total number of locks exceeds the lock table size
全表更新若干个字段信息,数据量不大,也就287338条,但是反复更新都以报错失败:The total number of locks exceeds the lock table size。Google之,问题原因是innodb_buffer_pool_size的默认在只有8M太小,调大就好了,试图通过SET GLOBAL innodb_buffer_pool_size = 1024 * 102...
2020-04-30 14:17:50 404
转载 HBase之rowkey设计原则和方法
rowkey设计原则和方法rowkey设计首先应当遵循三大原则:rowkey长度原则rowkey是一个二进制码流,可以为任意字符串,最大长度为64kb,实际应用中一般为10-100bytes,它以byte[]形式保存,一般设定成定长。一般越短越好,不要超过16个字节,注意原因如下:1、目前操作系统都是64位系统,内存8字节对齐,控制在16字节,8字节的整数倍利用了操作系统的最佳特性。2...
2020-04-19 09:08:50 232
转载 springboot声明bean的六种方式
----声明bean----1.@Component 声明普通bean2.@Component 声明FactoryBean@Componentpublic class MyFactory implements FactoryBean<MytestBean> { @Override public MytestBean getObject() throws Excepti...
2020-04-18 09:40:06 2743
转载 Java开发必须掌握的 20+ 种 Spring 常用注解
Spring部分1.声明bean的注解@Component 组件,没有明确的角色@Service 在业务逻辑层使用(service层)@Repository 在数据访问层使用(dao层)@Controller 在展现层使用,控制器的声明(C)2.注入bean的注解@Autowired:由Spring提供@Inject:由JSR-330提供@Resource:由JSR-250提供...
2020-04-18 09:35:08 178
转载 单例模式的使用场景
就算你没有用到过其他的设计模式,但是单例模式你肯定接触过,比如,Spring 中 bean 默认就是单例模式的,所有用到这个 bean 的实例其实都是同一个。单例模式的使用场景什么是单例模式呢,单例模式(Singleton)又叫单态模式,它出现目的是为了保证一个类在系统中只有一个实例,并提供一个访问它的全局访问点。从这点可以看出,单例模式的出现是为了可以保证系统中一个类只有一个实例而且该实例又...
2020-04-16 07:10:18 5113
转载 一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程
通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。对于JVM垃圾回收,之前一直都是处于理论阶段,就知道新生代,老年代的晋升关系,这些知识仅够应付面试使用的。前一段时间,线上服务器的FullGC非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了,这表明的服务器的状态已经非常不正常了...
2020-04-15 07:32:16 172
转载 JVM性能调优及线上故障问题排查步骤
一、发现问题下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。二、排查思路简单分析下可能出问题的地方,分为5个方向:系统本身代码问题内部下游系统的问题导致的雪崩效应上游系统调用量突增http请求第三方的问题机器本身的问题三、开始排查查看日志,没有发现集中的错误日志,初步排除代码逻...
2020-04-15 07:17:13 547
转载 AQS条件队列及中断机制
Condition条件队列当我们进行线程间的通信时,可以使用ReetrantLock与Condition相结合,其中的await()和signal()方法进行线程间的阻塞与唤醒。我将详细的解释其中的机制。ConditionObjectConditionObject是实现条件队列的关键,每个ConditionObject对象都维护一个单独的条件等待对列。一个AQS中可以有多个条件队列,但是只有...
2020-04-13 22:27:49 1966
原创 连接池
public static void main(String[] args) throws Exception{ //httpclient连接池 //创建连接池 PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager(...
2020-04-13 07:37:26 354
转载 Finalizer 导致的OOM
本文介绍的是Java里一个内建的概念,Finalizer。你可能对它对数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了。在java.lang.Object里面就有一个finalize()的方法。这个方法的实现是空的,不过一旦实现了这个方法,就会触发JVM的内部行为,威力和危险并存。如果JVM发现某个类实现了finalize()方法的话,那么见证奇...
2020-04-12 16:58:52 424
转载 什么是AOP?Spring AOP和AspectJ的区别是什么?
AOP(Aspect Orient Programming),它是面向对象编程的一种补充,主要应用于处理一些具有横切性质的系统级服务,如日志收集、事务管理、安全检查、缓存、对象池管理等。AOP实现的关键就在于AOP框架自动创建的AOP代理,AOP代理则可分为静态代理和动态代理两大类,其中静态代理是指使用AOP框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而...
2020-04-12 10:23:33 1046
转载 Object有哪些方法
clone方法protected native Object clone() throws CloneNotSupportedException;实现对象的浅拷贝,只有实现了cloneable接口才可以调用此方法,否则抛出 CloneNotSupportedException异常getClass方法public final native Class<?> getClass();...
2020-04-12 10:14:14 115
原创 强引用、软引用、弱引用和幻象引用有什么区别
在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。不同的引用类型,主要体现的是对象不同的可达性状态和对垃圾收集的影响。1 、强引用我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。当JVM内存空间不足,JVM宁愿抛出OutOfMemo...
2020-04-12 10:09:17 118
转载 WEB服务器(ngnix,tomcat)
1 WEB服务端综述部分2 Nginx部分3 Tomcat部分1 WEB服务端综述部分1.1 什么是WEB服务器WEB服务器也称为WORLD WIDE WEB服务器,主要功能是提供网上信息浏览服务。服务器是一种被动程序:只有发出请求,服务器才会响应。Internet上的服务器也称为Web服务器。Web服务器是指驻留于因特网上某种类型计算机的程序。服务器使用HTTP(超文本传输协议...
2020-04-12 08:13:08 537
转载 java双亲委派机制及作用
什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。类加载器的类别BootstrapClassLoader(启动类加载器)c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开...
2020-04-12 08:07:33 246
原创 Redis分布式锁的正确实现方式
前言分布式锁一般有三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保...
2020-04-11 08:40:52 204
转载 HBase和Redis的区别有哪些?
HBase和Redis的功能上比较相似。都是nosql类型的数据库。但是在适用场景上,两者还是有比较明显的区别的。下面本篇文章就来对比一下HBase和Redis,介绍HBase和Redis之间的区别,希望对你们有所帮助。读写性能HBase写快读慢,HBase的读取时长通常是几毫秒,而Redis的读取时长通常是几十微秒。性能相差非常大。数据类型HBase和Redis都支持KV类型。但是Red...
2020-04-11 07:00:49 166
转载 java集合
一、Collection的全局继承关系二、系列文章【Java集合系列一】ArrayList解析备注:1、ArrayList本质上就是一个数组,所有对外提供的方法都是对数组操作的封装;2、比如add操作,先扩容,然后插入到数组中;set操作,本质上就是替换操作;删除操作,就是将待删除元素之后所有的元素统统前移一位;indexOf操作,就是遍历数组,找到元素所在位置的下标;3、此类中依赖...
2020-04-11 06:56:41 105
转载 JDK1.7和JDK1.8中HashMap为什么是线程不安全的?
前言只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap。但是为什么HashMap是线程不安全的呢,之前面试的时候也遇到到这样的问题,但是当时只停留在***知道是***的层面上,并没有深入理解***为什么是***。于是今天重温一个HashMap线程不安全的这个问题。首先需要强调一点,HashMap的线程不安全体现在会造成死循环、数据丢...
2020-04-10 10:00:31 477
转载 Kafka如何保证百万级写入速度以及保证不丢失不重复消费
------------------------正文开始---------------------------一、如何保证百万级写入速度:目录1、页缓存技术 + 磁盘顺序写2、零拷贝技术3、最后的总结“这篇文章来聊一下Kafka的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点。Kafka是高吞吐低延迟的高并发、高性能的消息中间件,在大数据领域有极为广泛的运用。配置良好的K...
2020-04-10 07:57:56 181
转载 Spring Boot简介
Spring Boot的主要动机是简化配置和部署spring应用程序的过程。Spring Boot是什么?Spring Boot不是一个框架,它是一种用来轻松创建具有最小或零配置的独立应用程序的方式。这是方法用来开发基于Spring的应用,但只需非常少的配置。它提供了默认的代码和注释配置,快速启动新的Spring项目而不需要太多时间。它利用现有的Spring项目以及第三方项目来开发生产就绪(投...
2020-04-06 19:49:33 164
原创 spring-boot 自定义starter
在springboot中,使用的最多的就是starter。starter可以理解为一个可拔插式的插件,例如,你想使用jdbc插件,那么可以使用spring-boot-starter-jdbc;如果想使用mongodb,可以使用spring-boot-starter-data-mongodb。 这些starter都是springboot为我们提供的一些封装,这些starter能非常方便快捷的增加功能...
2020-04-06 19:27:30 150
原创 Tomcat
1、Tomcat 的缺省端口是多少,怎么修改?1)找到 Tomcat 目录下的 conf 文件夹2)进入 conf 文件夹里面找到 server.xml 文件3)打开 server.xml 文件4)在 server.xml 文件里面找到下列信息改成你想要的端口<Connector connectionTimeout="20000" port="8080" protocol="HTT...
2020-04-06 17:57:23 250
转载 TCP连接的状态详解以及故障排查
1、TCP状态了解TCP之前,先了解几个命令:linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lsof -i:port 可以检测到打开套接字的状况3)、 sar -n SOCK 查看tcp创建的连接数4)、tcpdump -iany tcp port 9000 对tcp端口为9000的进行抓包5)、tcpdump dst p...
2020-04-05 22:52:17 1408
转载 多线程、架构、异步消息、Redis等性能优化策略
常见性能优化策略分类1.代码之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次等。2.数据库...
2020-04-04 17:40:22 223
转载 常用的后端性能优化六种方式:缓存化+服务化+异步化等
后端优化的六种方法:1.硬件升级硬件问题对性能的影响不容忽视。举一个例子:一个DB集群经常有慢SQL报警,业务排查下来发现SQL都很简单,该做的索引优化也都做了。后来DBA同学帮忙定位到问题是硬件过旧导致,将机械硬盘升级成固态硬盘之后报警立马消失了,效果立竿见影!2.缓存化缓存可以称的上是性能优化的利器,使用缓存时需要考虑缓存命中率、缓存更新、数据一致性、缓存穿透及雪崩、Value过大...
2020-04-04 17:36:28 1614
转载 什么是缓存雪崩?服务器雪崩的场景与解决方案
什么是应用服务雪崩雪崩问题分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服务调用者阻塞,最终可能引发雪崩连锁效应。缓存雪崩当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力,造成数据库后端故障,从而引起应用服务器雪崩。雪...
2020-04-04 17:02:05 706
原创 Redis线程模型
redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。文件事件处理器的结构包含 4 个部分:多个 socketIO 多路复用程序文件事件分派器事件处理器(包括:连接应答处理器、命令请求...
2020-04-04 16:45:25 339
转载 分布式系统session一致性的问题
session的概念什么是session?服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后...
2020-04-04 15:51:52 225
转载 深入剖析JVM之G1收集器、及回收流程、与推荐用例
JVM垃圾收集器发展历程JVM垃圾收集器发展历程第一阶段,Serial(串行)收集器在jdk1.3.1之前,java虚拟机仅仅能使用Serial收集器。 Serial收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。第二阶段,Parallel(并行...
2020-04-04 14:41:10 171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人