- 博客(90)
- 资源 (1)
- 收藏
- 关注
原创 Redis数据结构
命令学习可以使用 在线redis环境。数据类型Redis 比较常见的数据结构有 string、list、hash、set、sorted set 等,但是 Redis 还有比较高级的3种数据结构:HyperLogLog、Geo、BloomFilter。String(字符串)String 是 Redis 最简单最常用的数据结构,也是 Memcached 唯一的数据结构。在平时的开发中,String 可以说是使用最频繁的了。底层实现:如果一个字符串对象保存的是整数值, 并且这个整数值可以用 long
2022-03-29 21:30:00
15007
1
原创 【JVM】垃圾回收
一些名词:Minor GC (新生代GC)Major GC (老年代GC)Full GC(总体GC)Mixed GC(G1垃圾收集器特有gc)常见问题如何判断对象是否死亡(两种方法)。引用计数可达性分析简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。强引用是最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“Object obj=new Object()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾
2022-02-25 12:59:35
458
原创 【JVM】类的加载
类的生命周期主要有七步:类加载过程系统加载 Class 类型文件主要分3步:加载->连接->初始化。连接过程又可分为:验证->准备->解析。总体共5步。加载加载需要完成的操作在加载类时,Java 虚拟机必须完成以下3件事情:通过类的全名,获取类的二进制字节流将二进制字节流所代表的静态存储结构转化为方法区内的运行时数据结构(Java 类模型)创建 java.lang.Class 类的实例,表示该类型。作为方法区这个类的各种数据的访问入口二进制流的获取虚拟机规
2022-02-25 12:52:43
882
原创 dubbo布尔值序列化后没有is问题
dubbo布尔值序列化问题今天遇到一个问题,dubbo接口里的某个response的bool字段,字段名里含有is,序列化后的值里is居然自动消失了。这里随便举个例子:public class User implements Serializable{ private boolean isPayed;}调用该dubbo接口之后,序列化出来的User中,本来的isPayed 变成了 payed。因为dubbo用的是Gson解析,所以尝试加上注解 @SerializedName("isPa
2020-12-03 20:46:25
738
原创 Java数组转ArrayList的注意事项
今天做一道题目时,遇到了一个问题——将一个int[]数组转化成List<Integer>类型,好像是一个挺常见的场景。于是立刻写下:ArrayList<Integer> list = new ArrayList<>(Arrays.asList(array));结果就报错了:Line 22: error: incompatible types: Integer[] cannot be converted to int[] int[] temp
2020-07-28 21:15:58
1677
原创 leetcode410_分割数组的最大值
410. 分割数组的最大值Difficulty: 困难给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个
2020-07-25 22:06:24
303
原创 leetcode1025_除数博弈
1025. 除数博弈Difficulty: 简单爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2输出:true解释:爱丽丝选择
2020-07-24 22:32:47
203
原创 leetcode64_最小路径和
题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-path-sum解这是一个常见的动态规划问题。我们可以使用一个一维数组,从左至右、从上到下
2020-07-23 23:28:37
345
原创 Xshell配色美化
Xshell是一款在windows下比较流行的SSH终端工具,在我使用过的终端工具中,它是比较平衡的一款,在稳定性、便利性、功能以及UI设计等方面都不错。为了让Xshell的页面更加美观、明了,我对它做了一些优化。一、配色方案Xshell有一些基本的配色,使用方式是:工具-配色方案-选择配色方案。内置的配色比较普通,这时就需要导入一些网上开源的配色方案,或者自己来配置。这里记录一个GitHub上的配色方案集合:https://github.com/netsarang/Xshell-ColorSchem
2020-06-07 22:32:58
6158
2
原创 CentOS 6.8安装docker报错解决
最近学习docker,在本地虚拟机(Centos版本是7)上安装很顺利。后来想在之前买的阿里云服务器上试试,阿里云的Centos版本是6.8。在安装这一步就被坑了。一开始按照网上教程,安装步骤如下:yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum instal...
2020-04-28 13:20:49
1006
1
原创 idea下Gradle下载速度慢问题
将项目中build.gradle文件中repositories { mavenCentral()}修改为阿里源:allprojects { repositories { google() jcenter() maven{ url 'http://maven.aliyun.com/nexus/content/groups/pu...
2019-11-12 23:02:51
12535
1
原创 关于秒杀系统设计的思考
秒杀业务挑战及解决方案此部分摘自《大型网络技术架构-核心原理与案例分析》对现有网站业务造成冲击秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。解决方案:秒杀系统独立部署。将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离。高并发下的应用、数据库负载用户在秒杀...
2019-09-01 16:20:13
429
原创 LRU算法的Java实现
LRU原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。实现方式要实现LRU算法,有 2 种实现方式。第一种,是使用Java中现成的API —— LinkedHashMap。它在HashMap的基础增加了按照访问顺序排序的功能,非常适合LRU的实现。代码如下:/...
2019-08-14 21:31:19
460
原创 缓存穿透、缓存击穿、缓存雪崩、热点数据失效的解决方法
我们使用缓存时,一般流程是这样的:当需要查询一条数据,先去查询缓存,如果缓存有就直接返回,如果没有就去查询数据库,然后返回。这时是有可能会出现一些异常现象的。一、缓存穿透什么是缓存穿透正常情况下,我们去查询数据都是存在于缓存中,因为使用缓存目的就是尽量少的查询数据库,偶尔可能会有数据存在数据库里面的情况。如果有一个请求去查询一条压根儿数据库中根本就不存在的数据,也就是缓存和数据库都查询不...
2019-08-13 17:41:43
327
转载 drop、truncate和delete的区别
转自:https://www.cnblogs.com/zhizhao/p/7825469.htmldrop、truncate和delete的区别(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且...
2019-08-12 23:14:11
192
原创 【Java】集合-HashMap详解
HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。底层数...
2019-07-18 22:31:10
270
原创 Java8新特性-Stream
前言Stream API 旨在让编码更高效率、干净、简洁。从迭代器到Stream当使用 Stream 时,我们一般会通过三个阶段建立一个流水线:创建一个 Stream;进行一个或多个中间操作;使用终止操作产生一个结果,Stream 就不会再被使用了。案例1:统计 List 中的单词长度大于6的个数/*** 案例1:统计 List 中的单词长度大于6的个数*/ArrayL...
2019-07-17 22:57:20
197
原创 【Java】集合-LinkedList详解
前言本篇主要记录Java集合类中LinkedList的用法、结构以及部分实现。LinkedList简介LinkedList是一个实现了List接口和Deque接口的双端链表。 它实现了的其他接口还有Cloneable, java.io.Serializable,另外他也继承了AbstractSequentialList抽象类。LinkedList底层的链表结构使它支持高效的插入和删除操作...
2019-07-14 22:30:11
919
原创 【Java】基于NIO的多人聊天室
前言学习了NIO的基本原理及使用方法之后,开始尝试写一个NIO实现的聊天室,练习一下代码流程。服务器端服务器端主要负责接受各客户端的连接,接收客户端发来的信息,并且将其广播给所有已连接客户端。/** * Created by makersy on 2019 *//** * NIO服务器端 */public class NioServer { /** * 启...
2019-07-14 00:11:47
423
1
原创 【Java】IO、NIO
前言Java IO,即Java中的输入输出,可以用来数据的写入和读出。在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。本文主要总结IO流、NIO相关知识。IO流的分类按照流的流向分,可以分为输入流和输出流输入流: 只能从中读取数据,而不能向...
2019-07-13 23:14:44
244
原创 【Java】集合-ArrayList详解
ArrayList简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。它继承于 AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Seriali...
2019-07-11 22:36:54
589
原创 手写简易版Spring框架-2
前言Spring框架作为当前最流行的JavaEE框架之一,简化了代码,提升了性能。而在这其中最主要的技术就是依赖注入了。所谓依赖注入,就是创建被调用者的工作由spring来完成,然后将其注入调用者。本篇主要介绍了依赖注入和控制反转,并分析了上一篇中,依赖注入的代码实现原理。关于BeanBean的特点:生命周期较长在整个虚拟机内可见维护成本高,单例存在Bean优势运行期效率...
2019-07-09 22:58:19
370
原创 手写简易版Spring框架-1
前言为了巩固学习Spring框架,我尝试通过手写spring,实现SpringMVC基本功能来学习Spring源码。实现功能这次先写了一个简易的框架,实现了最基本的IoC功能,以及springmvc中常用的注解,具体如下:@Controller@RequestMapping@RequestParam@Autowired@Bean代码内嵌服务器采用了apache的embe...
2019-07-09 22:56:32
536
2
转载 可能是最全的git忽略文件规则.gitignore文件
转自http://blog.youkuaiyun.com/li396864285/article/details/72738895gitignore可以防止不相关系统自动产生的文件提交到git上。该文件放置到git项目的根目录下,能够让git忽略符合.gitignore中文件后缀的文件,不会被添加到git版本控制中。.gitignore中的文件后缀列表大多是系统自动产生的,上传到git是毫无意义的。# ...
2019-07-09 20:54:42
562
原创 剑指offer-正则表达式匹配
题目描述请实现一个函数用来匹配包括’.'和 ‘*’ 的正则表达式。模式中的字符 ‘.’ 表示任意一个字符,而 ‘*’ 表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。题解markdown里面的 * 需要转义,一个个转实在有点麻烦,还是把...
2019-07-09 11:26:26
176
原创 【Java】注解
介绍注解(Annotation ),有标记、注释的意思,也被称为元数据,他为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。在 Java 中注解是一个很重要的知识点。Java 注解是从 Java SE5 引入的。他可以提供用来完整描述程序所需的信息,为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供...
2019-07-06 21:15:05
153
原创 RabbitMQ的远程连接
云服务器上装了一个rabbitmq,在本地使用远程连接时给我报错无法连接。然后我查阅了一下官方文档,给出的原因是刚安装时的默认用户guest只能本地环回连接,也就是localhost。要使用远程连接,官方推荐是要我们新建自己的账号,赋予其远程访问权限。具体步骤如下:创建用户rabbitmqctl add_user test test设置用户角色rabbitmqctl set_use...
2019-07-05 20:07:45
3864
2
原创 【dp】构造回文
构造回文题目给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子1:abcdagoogle输出例子1:22题...
2019-06-08 10:17:54
226
原创 缓存的使用之对象缓存、URL缓存和页面缓存
前言作为一个程序员,优化代码、提升用户体验是一件令人上瘾的事情。假如现在我们需要加快网页加载速度,提高我们网站的吞吐量,那么实现这一目的的有效途径之一,就是缓存。在缓存当道的现在,几乎无处不在使用缓存,有浏览器端的缓存,有服务器端的缓存,有代理服务器的缓存,有ASP.NET页面缓存,对象缓存。数据库也有缓存。这次就来介绍一下页面缓存和对象缓存。正文页面缓存这种缓存技术一般用于不会经常变...
2019-06-06 00:02:40
1176
原创 如何使用jmeter进行压测
redis100个并发连接,100000个请求redis-benchmark.exe -h localhost -p 6379 -c 100 -n 100000各参数:-h:地址-p:端口-c:连接数-n:请求数存取大小为100字节的数据包redis-benchmark.exe -h localhost -p 6379 -q -d 100只测试某些操作的性能...
2019-06-02 22:04:57
1098
转载 CentOS7 yum方式安装MySQL5.7
转载自博客:https://www.cnblogs.com/bigbrotherer/p/7241845.html在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。1 下载并安装MySQL官方的 Yum Repository[root@localhost ~]# wget -i -c ht...
2019-06-02 10:54:41
127
原创 LeetCode 5. 最长回文子串
题目链接给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”题解首先要理解回文的意义,它意味着一个字符串从前往后、从后往前看都是一样的。也就是说,我们可以找到一个中点,从这个中点开始,左右对称。于是...
2019-05-31 22:33:30
121
原创 剑指offer-二叉树中和为某一值的路径
题目描述题目地址输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)题解采用dfs思想,进行深度优先遍历,用一个ArrayList存储当前路径,另一个ArrayList存储满足条件的路径。每当进入一个节点,就向当前路径添加当前节点,随后计算...
2019-05-26 10:51:20
147
原创 SpringBoot下集成redis配置application.yml文件
前言最近用springboot做项目用到了redis,第一次使用了yml格式作为配置文件。在这里记录一下我的使用过程,以及出错情况。希望大家节约时间,少踩坑。正文第一步,maven导入依赖。<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artif...
2019-05-25 22:30:05
34875
1
原创 paypal笔试: 关联用户(并查集)
题目PayPal上海团队一直致力于风险控制,风控需要收集各种信息,有时需要通过地理位置找出用户与用户之间存在的关联关系,这一信息可能会用于找出用户潜在存在的风险问题。我们记两个用户的关联关系可以表示为:(1) user1,user2与他们最常发生交易的地理位置分别为(x1, y1),(x2, y2),当这两个用户的欧氏距离不超过d时,我们就认为两个用户关联。(2) 用户关联性具有传递性,若用...
2019-05-21 15:15:54
652
原创 【Java】对象的序列化和克隆详解
前言在学习源码的过程中,常常看到很多类都实现了Cloneable接口或是Serializable接口,如集合类。虽然知道他们的作用是对象序列化,但是具体的功能却还是一知半解,所以花了些时间去系统地了解了一下他们。正文克隆也经常被称为拷贝(copy),比如很多面试官都会问深拷贝和浅拷贝,就是深克隆和浅克隆。序列化和克隆序列化 - Serializable定义:将实现了Serializab...
2019-05-20 23:20:48
3214
原创 Java内存模型浅析
前言作为一个初级Java程序员,常常会将JVM内存模型和Java内存模型(JMM)弄混。实际上,这两者是完全不同的。今天我来介绍一下Java内存模型。正文Java内存模型基础线程间通信的方式通信是指线程之间是以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型中,线程之间共享程序的公共状态,通过写 - 读内存中的公共状态进行隐式通信...
2019-05-19 22:48:53
414
原创 springboot配置mysql数据库报错: create connection SQLException
配置springboot+druid时,启动时总是报错,错误信息如下;java.sql.SQLException: Unknown system variable 'tx_isolation' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) ~[mysql-connector-java-5.1.43.jar:5....
2019-05-18 13:56:09
6926
3
原创 ThreadLocal的使用+源码分析
ThreadLocal介绍ThreadLocal,意为线程的局部变量,是在线程本地存了一个变量的副本。只有当前线程可以访问。它的目的是为了在线程之间共享某个变量,而不会发生冲突。就好比有100个人需要填一张表,按照同步机制的做法就是保证这支笔同一时间只有一个人使用,而ThreadLocal则是采用另一种方式:每个人都发了一支笔。相比同步机制,这是一种“空间换时间”的做法。在同步机制中,使用了s...
2019-05-17 16:59:49
463
原创 【Java】使用socket实现控制台多线程聊天室
刚学习了socket编程和多线程相关知识,为了巩固下知识,动手实现了一个基于BIO的socket+多线程的控制台聊天室。github代码地址:传送门功能介绍首先启动server端,然后启动client端。任意一个client发送给server的消息都将会被转发给所有在线的client,实现了一个聊天室功能。client发送exit指令可以下线,所有的client端,以及server端都会收...
2019-05-16 16:27:55
1272
libmysql432bit.zip
2019-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人