- 博客(47)
- 收藏
- 关注
原创 java 实现跳表
前言最近在网上看到redis为什么用跳表而不用平衡树,觉得好奇就看了一下。跳表的概念网上都有,这里就不赘述了。总的来说跳表相比于红黑树实现简单,并且支持范围查找。同时skiplist又无法归入哈希表、平衡树这两种用于查找的常见又高效的数据结构。所以动手实现了一个(主要是看到了实现简单)。代码/** * 此跳表用于有序存储节点并且查找指定权值节点的时间复杂度为O(logn) * * @...
2019-10-27 19:22:47
859
原创 jvm运行时数据区的理解
前言对于java学习来说,若是只会实现一些简单的CRUD肯定是不够的,想要理解和深入学习java肯定还是药理解一下底层实现,jvm的机制和原理是很好的学习内容,所以读了《深入理解java虚拟机》。读完后感觉还是不够,所以打算在写下笔记的时候巩固已学内容,和查漏补缺。1、jvm的运行时数据区域java的运行时数据区域:1.1、程序计数器记录正在执行的字节码指令地址。1.2、java虚...
2019-10-18 20:49:35
382
原创 java 线程的工作内存和ThreadLocal
前言这两者有什么关系吗,一个工作内存,一个ThreadLocal,为什么要合在一起讨论呢,因为工作内存是线程独享的,而ThreadLocal所保存的也是线程独自持有的对象。
2019-10-14 21:21:28
1501
3
原创 java的join和wait
看了一下Thread的源码,join()是通过wait()实现的,看起来是this.wait(),可为什么是调用的线程停下来等待了呢,首先tb.join() 是一个synchronized方法, 里面调用了wait(),这个过程的目的是让持有这个同步锁的线程进入等待,那么谁持有了这个同步锁呢?答案是主线程,因为主线程调用了tb.join()方法,相当于在tb.join()代码这块写了一个同步代码...
2019-10-06 21:39:47
367
原创 右移运算
前言关于移位运算只知道是二进制运算,会比加减乘除之类的快一些,但其实移位操作还有不少的小秘密。1、有符号右移 >>如果希望右移-1==0作为循环或者递归的终止条件,那你可能要死循环或者栈溢出了。下面说说为什么吧移位操作前-1原码:1000 0001反码:1111 1110补码:1111 1111右移一位(右移几位都一样)补码:1111 1111反码:1111 1...
2019-09-21 19:19:18
2075
原创 nginx 启动失败
启动nginx时报错Jul 18 20:48:56 iZ7l4lsvycqnl8Z systemd[1]: Failed to start A high performance web server and a reverse proxy server.Jul 18 20:48:56 iZ7l4lsvycqnl8Z systemd[1]: nginx.service: Unit entered...
2019-07-18 20:52:07
380
原创 Hexoarticle
Hexoarticle1、简介hexoarticle 基于SpringBoot,提供在线写博客的页面。在使用hexo时写博客更方便。2、功能已完成功能对文章的写、编辑、删除。简易的界面计划中的功能更好看的界面4、安装1、下载代码git clone https://gitee.com/llqqff/hexoarticle.git2、进入根目录进行打包mvn pac...
2019-07-18 17:30:34
136
原创 《Java解惑》读书笔记
表达式之谜1、取余时要注意操作数的和结果的符号,操作数是负数时,结果并不显而易见。2、对精度要求更高的时候,要避免使用double和float,而使用int、long、BigDecimal。3、在定义常量时,要考虑到是否使用默认类型,比如final long MICROS_PER_DAY =24 * 60 * 60 * 1000 * 1000,那么这个运算不会达到表达式所想要得到的结果。而应...
2019-07-04 16:51:19
286
转载 npm install hexo-renderer-sass时报错
问题使用hexo搭建博客时,需安装hexo-renderer-sass:$ npm install hexo-renderer-sass解决改用淘宝镜像:$ npm install -g cnpm --registry=https://registry.npm.taobao.org$ npm config set registry https://registry.npm.taoba...
2019-07-02 11:05:34
1138
原创 SpringBoot 连接数据库时出现Communications link failure的异常
出现这个异常有好几种情况。其中一种是连接断开了,但连接池没有检查,依旧使用了断开的连接,最后抛出异常。解决方法:在datasource的配置中加上 bySearch: testWhileIdle: true validationQuery: SELECT 1 timeBestweenEvictionRunsMillis: 3600000 #每个小时...
2019-06-26 16:13:23
5821
原创 java 隐藏邮箱和手机号
1、手机号phone = phone.replaceAll("(\\d{3})\\d{6}(\\d{2})", "$1******$2");//第一个参数是正则表达式,$1匹配第一个括号,$2匹配第二个2、邮箱email = email.getEmail().replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?);...
2019-06-24 10:46:08
1122
原创 SpringBoot 解决从后端将文件名传回前端的中文乱码问题
filename = new String(filename.getBytes("UTF-8"),"iso-8859-1");将filename进行编码转换之后就能正常显示了。
2019-06-08 20:17:01
4777
原创 修改ubuntu系统编码
vi /etc/default/locale LANG="zh_CN.UTF-8"使用source /etc/default/locale 在不重启的情况下使刚才的修改生效再使用locale查看localeLANG=zh_CN.UTF-8LANGUAGE=LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh...
2019-06-08 12:42:35
3254
原创 Nginx导致请求头丢失
1.Nginx代理时加上请求头信息: location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; ...
2019-06-08 00:04:31
4118
原创 Response设置编码
1.response.setContentType(“text/html; charset=UTF-8”)不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文2.response.setCharacterEncoding(“UTF-8”)仅仅是发送的浏览器的内容是UTF-8编码的,置于浏览器是用哪种编码方式显示不管。 所以当浏览器的...
2019-06-08 00:01:29
2995
原创 Nginx 修改上传文件大小限制
在使用的配置文件的server段内加入location / { root html; index index.html index.htm; client_max_body_size 1000m;// 根据自己情况设置 这里是1000Mb }即可成功解决。...
2019-06-08 00:00:33
2068
原创 记一次SpringBoot + bootstrap + jquery + shiro的坑
因为之前写过前后端分离的小项目,这一次打算不分离写一个,然后在本地运行能正常显示bootstrap的样式,打包放到服务器就不行了,于是找了很久的bug,终于找到了。下面是正常显示的样子下面是引入失败的样子看下控制台的报错信息第一行的报错看起来像是解析出现了问题。第二个报错像是jq引入失败。然而并没有相关的错误信息,并且看源码发现之前的一些$并没有报错。看起来只需要找到第一个问...
2019-06-03 17:06:19
877
3
转载 静态资源服务器(部署前端项目)
前端开发中,经常遇到有些场景需要用到服务器环境,例如AngularJS中的路由,或者是模拟ajax获取数据等需求时,这个时候并不需要考虑到服务端逻辑,只是搭建简单的静态资源服务,因此解决方法有很多,下面介绍几种简单快捷的常用方式:使用http-server如果你安装了node,那么http-server就是个不错的选择,只需要一行命令就可以快速启动。安装:npm install -g ht...
2019-06-03 12:46:42
5895
原创 sudo报错及在linux上启动jar包时报错java.net.UnknownHostException
解决方法:vi /etc/hosts加入127.0.0.1 你的主机名使用sudo或者再次启动jar包就不会报错了。
2019-06-03 11:49:27
565
转载 Shiro异常java.lang.IllegalArgumentException: Odd number of characters的解决方案
最近在做前后端分离,登录认证部分用到了Shiro,配置MD5加盐加密后,在登录的时候抛出的以下异常:java.lang.IllegalArgumentException: Odd number of characters.at org.apache.shiro.codec.Hex.decode(Hex.java:128) ~[shiro-core-1.3.2.jar:1.3.2]at or...
2019-06-03 11:14:53
2601
原创 java 浅拷贝与深拷贝
1、拷贝的目的大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗?克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。那么我把这个对象的临时属性一个一个的赋值给我新new的对象不也行嘛?可以是可以,但是一来麻烦不说,二来,clone是一个native方法,在底层实现的,运行速度上...
2019-05-14 18:06:13
104
原创 java 线程的多种状态及方法的比较
线程的生命周期1、新建(new)新建一个线程对象。2、可执行状态(runnable)/就绪状态新建的Thread对象调用start后进入就绪状态。3、执行状态(running)已获取cpu的使用权,执行run方法。4、阻塞状态(blocked)由于某些原因该线程放弃了cpu的使用权。停止执行。除非线程进入可运行的状态,才会有机会获取cpu的使用权。1. 等待阻塞:运行中的线程执行...
2019-05-11 13:07:52
105
转载 SpringBoot Controller接收参数常用方式
接受Map<String, String>@RequestBody@PostMapping(path = "/demo1")public void demo1(@RequestBody Map<String, String> person) { System.out.println(person.get("name"));}表单名与controller参...
2019-05-10 22:34:53
1965
原创 java 泛型
1、何为泛型?泛型的本质便是类型参数化,通俗的说就是用一个变量来表示类型,这个类型只能是引用类型,表明可接受的类型。2、为什么使用泛型?Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。这带来了很多好处:1、 类型安全。 泛型的主要目标是提高 Java 程序的类型...
2019-05-10 18:15:38
72
原创 java多态
1、多态多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作多态存在的三个必要条件:继承、重写、父类引用指向子类对象。多态的体现:重写、接口、抽象类和抽象方法多态性语言具有灵活,抽象,行为共享,代码共享的优势,很好的解决了应用程序函数同名问题。2、方法解析类从被载到虚拟机内存,到卸载出内存为止,整个生命周期如上图。那有些...
2019-05-09 21:51:28
138
转载 java enum的理解
原文:https://blog.csdn.net/zhoufanyang_china/article/details/86707727项目中如果要定义组变量,你可能会这样定义: //redis的key常量定义 public static final String KEY_PRE = "api-key"; //前缀 public static final String K...
2019-05-09 19:09:03
1019
原创 java instanceof 关键字
instanceof关键字java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。用法boolean result = object instanceof class在编译期object必须是引用类型,并且是class或其父类、子类的实例而运行期object不为...
2019-05-09 13:34:07
95
原创 java实现AOP
1、什么是AOP?AOP(Aspect Oriented Programming)是面向切面编程。根据我的理解,AOP就是基于一个主体,扩展一些功能,且不需要改动原来的代码。使程序更加灵活。AOP的原理就是代理模式。2、什么是代理模式?代理模式就是通过代理,控制对对象的访问。它的设计思路是: 定义一个抽象角色,使代理角色和真实角色分别去实现它。真实角色:实现抽象角色,定义业务逻辑,供代...
2019-05-04 21:27:42
552
1
原创 Tomcat项目部署去掉项目名及端口号
去掉项目名直接在server.xml中<Host></Host>间加一句<Context path="" docBase="/test" debug="0" reloadable="true"/>其中docBase="/test"中的/test是项目名字把项目放到tomcat7\webapps下面修改Host<Host name="www.t...
2019-05-04 14:43:52
1122
原创 SpringBoot定时任务
闲来无事想写一个定时执行任务的程序,本来想的是挂起一个线程然后sleep,但感觉不是很好,于是查阅资料,发现SpringBoot有一个注解@Scheduled是关于定时任务的。@Componentpublic class SchedulerTask { private int count=0; @Scheduled(cron="*/6 * * * * ?") pri...
2019-05-03 21:11:59
202
原创 SpringBoot中使用websocket遇到的问题
1、使用websocket打包时失败在打包时出错: PrivatemsgApplicationTests.contextLoads >> IllegalState Failed to load Applicat…跳过test 注释掉 runwith(SpringRunner.class)即可成功打包2、使用websocket后运行测试类抛异常在配置了ServerEndpoin...
2019-05-03 21:07:38
4177
原创 SpringBoot自动注入
普通的方法和变量都可以使用@Autowired进行自动注入。但是SpringBoot并不支持自动注入静态变量。可以使用set方法来注入静态变量。
2019-05-03 21:04:51
692
原创 leetcode 623.在二叉树中增加一行
给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整...
2019-05-03 18:10:37
146
转载 screen命令
原文:https://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html一、背景系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间...
2019-05-02 21:58:09
106
原创 ubuntu下 安装ab(apache bench)
ab(apache bench)是apache下的一个工具,主要用于做web站点的压力测试1.安裝ab命令sudo apt-get install apache2-utils2.命令详情Usage: ab [options] [http[s]: //]hostname[:port]/pathOptions are:-n requests Number of request...
2019-05-02 21:55:44
5625
原创 ubuntu下解决Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
sudo vim /etc/resolv.conf添加nameserver 8.8.8.8sudo apt-get update 完事。。
2019-05-02 21:53:09
2673
原创 启动多个redis实例
一个redis实例默认有16个数据库,但一般来说不同的项目用不同的redis实例会比较好,以免有的操作影响到其它的项目。拷贝一份新的配置文件cp redis.conf redis6001.confvi修改对应的配置项vi redis6001.conf#主要修改下面3个配置项就可以了pidfile : /var/run/redis_6380.pidport 6001rdbf...
2019-05-02 20:46:59
5645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人