- 博客(147)
- 问答 (1)
- 收藏
- 关注
原创 手写LRU(Least recently used)
通过LinkedHashMap的源码可以知道,在LinkedHashMap构造方法中,多了一个AccessOrder字段,这是一个Boolean类型字段,标识插入数据的排序类型(false 为插入顺序,true为访问顺序),所以这里我们需要设置为true。LinkedHashMap<String, Object> map = new LinkedHashMap<>(16, 0.75f, true); map.put("a", 1); ...
2021-09-03 10:21:56
163
原创 布隆过滤器
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.0</version> </dependency>package com.xdf.xcloud.api.utils;...
2021-09-02 16:33:49
176
原创 linux 安装mongodb
1、在线下载安装包 tar -zxvf mongodb-linux-x86_64-4.0.13.tgz2、tar -zxvf tar -zxvf mongodb-linux-x86_64-4.0.13.tgz 解压3、重新命名,方便mv mongodb-linux-x86_64-4.0.13 mongodb4、数据库文件夹、日志文件夹和配置文件文件夹。在usr/local/mongodb下执行:mkdir -p data logs etc5、在etc 执行vim mong..
2020-11-17 16:24:16
441
原创 面试常问的String字符串常量池
创建字符串对象有两种方式一种是通过初始化的方式创建String str="Hello";另一种是使用new关键字创建String str = new String("Hello");Java为了避免产生大量的字符串对象,设计了一个字符串池(String Pool),通过初始化方式创建的字符串对象都会存在于字符串池中,且字符串池中的字符串不会重复,以便可以被共享使用,提高存储效率。其工作原理是:当使用初始化的方式创建对象时,JVM会首先检查字符串池中是否存在值相等的字符串.
2020-11-17 14:46:59
171
原创 consul
CAP理论CAP理论是分布式架构中重要理论 一致性(Consistency) (所有节点在同一时间具有相同的数据) 可用性(Availability) (保证每个请求不管成功或者失败都有响应) 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)与 Eureka 有所不同,Apache Zookeeper 在设计时就紧遵CP原则,即任何时候对 Zookeeper 的访问请求能得到一致的数...
2020-07-01 10:29:30
303
原创 equals hashcode
介绍一、hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashC...
2019-12-19 11:25:05
193
原创 zookeeper 分布式锁
分布式锁肯定是用在分布式环境下。在分布式环境下,使用分布式锁的目的也是保证同一时刻只有一个线程来修改共享变量,修改共享缓存……。前景:jdk提供的锁只能保证线程间的安全性,但分布式环境下,各节点之间的线程同步执行却得不到保障,分布式锁由此诞生。实现方式有以下几种: 基于数据库实现分布式锁; 基于缓存(Redis等)实现分布式锁; 基于Zookeeper实现分布式...
2019-11-28 12:47:33
140
原创 zookeeper-初步认识
什么ZookeeperZookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过...
2019-11-28 09:37:18
182
原创 微服务-springcloud-分布式配置中心,Hystrix
什么是配置中心在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config c...
2019-11-22 17:58:52
142
原创 微服务-springcloud-注册中心,生产消费,ribbon,zuul
SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、负载均衡、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。由此可见,Spring Cloud 微服务架构是由多个组件一起组成的,各个组件的交互流程如下。 请求统一通过 API 网关 Zuul 来访问内部服务,先经过 Token...
2019-11-21 14:30:25
223
原创 微服务-概念
单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层、数据库访问层、控制层放入在一个项目中。优点:适合于个人或者小团队开发,不适合大团队开发。分布式项目架构根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程通讯技术。优点:1.把模块拆分,使用接口通信,降低模块之间的耦合度。2.把项目拆分成若干个子项目,不同的团...
2019-11-21 14:26:03
151
原创 XXL-JOB
许雪里 github 里面包含介绍:https://github.com/xuxueli/xxl-jobadmin可视化调度平台core是admin的依赖jarexecutor是具体的任务执行内容使用邮件遇到问题,需要在邮件的客户端配置生成授权码,这样就可以发邮件了xxljob架构图quartz的不足Qua...
2019-11-20 16:04:41
209
原创 mybatis一级缓存
@Autowired private SqlSessionFactory sqlSessionFactory; @Autowired private PropertieTabMapper propertieTabMapper; @Test @Transactional public void test() { SqlSession openSession = ...
2019-11-19 17:54:00
115
原创 RocketMQ -02 安装、集群
1.强调集群无单点,可扩展2.任意一点高可用,水平可扩展3.海量消息堆积能力,消息堆积后,写入低延迟。4.支持上万个队列5.消息失败重试机制6.消息可查询7.开源社区活跃8.成熟度(经过双十一考验)安装注意事项必须有jdk环境,rocketMQ是java写的。最好1.7以上。其他的看文档...
2019-11-13 15:38:54
102
原创 RocketMQ-01
RocketMQ分布式架构,支持集群,海量的消息堆积,支持上万个消息堆积。重试机制,持久化,顺序消费,事物消息RocketMQ包含的组件RocketMQ 通信组件使用了 Netty-4.0.9.Final,在乀上做了简单的协议封装。NameServer:单点,供Producer和Consumer获取Broker地址Producer:产生并发送消息Consumer:接受并消...
2019-11-12 12:51:58
129
原创 ActiveMQ
1、为什么要使用消息中间件解耦 、异步、削峰解耦:随着业务增长,模块之间耦合增加不利于维护开发。异步:异步可以提高代码执行效率。削峰:并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。可以先放到队列中执行。2、使用消息中间件有什么问题系统可用性:刚开始系统用的好好的,然后被你拆分解耦,万一mq挂了,是不是砸蛋了。系统复杂性增加:牵扯到生产者消费者...
2019-11-05 17:37:26
178
原创 nginx-01
题外:如何搭建一个安全架构nginx反向代理可以隐藏真实iphttps防止别人抓包分析搭建企业黑名单白名单防止模拟请求xss 脚本攻击sql注入ddos流量攻击(nginx)什么是nginx?nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试ng...
2019-10-30 16:54:57
202
原创 redis 六种淘汰策略
将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 默认情况下 memcached 就是这种方式, 大部分开发者都比较熟悉。LRU是Redis唯一支持的回收算法. 本文详细介绍用于限制最大内存使用量的 maxmemory 指令, 并深入讲解 Redis 所使用的近似LRU算法。maxmemory 配置指令maxmemory 用于指定 Redis 能使用的最大内存。既...
2019-10-29 16:31:05
219
原创 Java缓存机制-redis
Java缓存机制Java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下:要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致内存急剧上升,周期无法控制可以采用SoftReference,WeakRefere...
2019-10-28 15:05:54
376
原创 @transaction注解不起作用的原因
看似加个注解就ok了,但是实际可能就会用错了,有时候不起作用,容易被忽略。1、@Transactional 注解只能应用到 public访问权限的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不起事务作用。标注@Transactional的方法如果...
2019-10-24 10:18:15
1354
原创 bean的生命周期
1.Spring对Bean进行实例化(相当于程序中的new Xx())2.Spring将值和Bean的引用注入进Bean对应的属性中3.如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)4.如...
2019-10-21 14:04:45
95
原创 1.8之后hashmap红黑树
一. 二叉树概述二叉树是递归定义的,其节点有左右子树之分1.1 二叉树特性: 每个节点最多只有两颗子树,节点的度最大为2 左子树和右子树是有顺序的,次序不能颠倒 即使某个节点只有一个子树,也要区分左右子树1.2 二叉树基本形态:逻辑上二叉树有五种基本形态: 空二叉树 只有一个根节点的二叉树 只有左子树 只有右子树 完...
2019-10-15 17:39:37
255
原创 Eclipse快捷键大全
Ctrl+1 快速修复(最经典的快捷键)Ctrl+D 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+Ent...
2019-10-12 14:01:09
133
原创 内存泄漏和内存溢出
内存泄漏(memory leak ) 内存溢出 (out of memory)内存泄露 :是指程序在申请内存后,无法释放已申请的内存空间就造成了内存泄漏,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。我们知道了内存泄漏的原因而内存溢出则有可能是因为我们我们多次内存泄漏堆积后的后果则变成了内存溢出内存溢出: 指程序申请内存时,没有足够的内存供申请者使用,...
2019-10-10 10:33:21
225
原创 mysql 优化 -2
索引原理B+TreeB-Tree有许多变种,其中最常见的是B+Tree,例如MySQL就普遍使用B+Tree实现其索引结构。与B-Tree相比,B+Tree有以下不同点:每个节点的指针上限为2d而不是2d+1。内节点不存储data,只存储key;叶子节点不存储指针。主键索引主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_...
2019-09-29 11:12:10
78
原创 mysql 优化 -1
优化方案表的设计合理化(符合3NF)添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]SQL语句优化分表技术(水平分割、垂直分割)读写[写: update/delete/add]分离存储过程 [模块化编程,可以提高速度]对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]1、show variables l...
2019-09-28 14:47:31
122
原创 重复提交,CSRF,XSS攻击
表单重复提交解决方案(防止Http重复提交网络延时在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。重新刷新表单提交后用户点击【刷新】按钮导致表单重复提交点击浏览器的【后退】按钮回退到表单页面后进行再次提交用户提交表单后,点击浏览器的...
2019-09-20 17:19:38
383
原创 cookie session
Cookie技术核心Cookie类:用于存储会话数据1)构造Cookie对象Cookie(java.lang.String name, java.lang.String value)2)设置cookievoid setPath(java.lang.String uri) :设置cookie的有效访问路径void setMaxAge(int expiry): 设置coo...
2019-09-19 15:28:22
87
原创 maven 回滚
maven好处:1.管理jar包2.解决冲突3、远程 、本地、私服仓库 方便使用jar包打包过程:一、Maven中央存储库当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 http://sea...
2019-09-18 15:59:11
1620
原创 jvm-5 垃圾回收机制
垃圾回收机制概述Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般...
2019-09-17 14:43:00
158
原创 jvm-4 回滚
自动内存管理机制Java虚拟机原理所谓虚拟机,就是一台虚拟的机器。他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box、Vmare就属于系统虚拟机,他们完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台。程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行...
2019-09-17 11:14:36
119
原创 TCP粘包、拆包问题解决方案
什么是粘包/拆包一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题。下面可以看一张图,是客户端向服务端发送包:1. 第一种情况,Data1和Data2都分开发送到了Server端,没有产生粘包和拆包的情况。2. 第二种情况,Data1和Data2数据粘在了一起,打成了一个大的包发送到Server端...
2019-09-16 17:15:52
205
原创 Netty快速入门
什么是NettyNetty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。Netty应用场景1.分布式开源框架中dubbo、Zookeeper,RocketMQ底层rpc通讯使用就是netty(底层nio),底层协议都是用的tcp或udp协议。2.游戏开发中,底层使用netty通讯。为什么选择nett...
2019-09-16 11:13:18
157
原创 NIO同步阻塞与同步非阻塞
BIO与NIOIO(BIO)和NIO区别:其本质就是阻塞和非阻塞的区别阻塞概念:应用程序在获取网络数据的时候,如果网络传输数据很慢,就会一直等待,直到传输完毕为止。非阻塞概念:应用程序直接可以获取已经准备就绪好的数据,无需等待。IO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7后升级NIO库包,支持异步非阻塞同学模型NIO2.0(AIO)BI...
2019-09-16 10:56:17
277
原创 NIO编程
NIO概述什么是NIO?Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是...
2019-09-15 14:19:25
71
原创 设计模式
什么是设计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。设计模式的分类?总体来说设计模式分为三大类:创建型模式,共五...
2019-09-10 10:55:53
152
原创 索引-00 不为人知的秘密
1、强制使用索引EXPLAIN SELECT sum(if(type = 1,amount,0)) - sum(if(type = 2,amount,0)) as amountFROM integral_wallet_seq force index (cust_id_index,inte_name_index)WHERE inte_name = 'USDT' and cus...
2019-09-05 12:33:16
142
原创 多线程- 13 线程池
什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会...
2019-08-27 16:15:12
108
原创 多线程-12 并发包-并发队列
队列分为有界、无界阻塞、非阻塞ConcurrentLinkedQueue 是单向链表结构的无界并发队列。元素操作按照 FIFO (first-in-first-out 先入先出) 的顺序。适合“单生产,多消费”的场景。内存一致性遵循对ConcurrentLinkedQueue的插入操作先行发生于(happen-before)访问或移除操作。ConcurrentLinkedDeque...
2019-08-27 15:41:29
99
原创 多线程- 11 并发包-集合
并发包同步容器类Vector与ArrayList区别1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不...
2019-08-27 10:57:33
178
空空如也
连接sftp,偶尔报连接错
2017-11-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人