![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《知识增强系列》
文章平均质量分 79
陈汤姆
一只叫做汤姆的程序员
展开
-
《深入理解Java虚拟机》一书总结(干货满满)
看完《深入理解Java虚拟机》一书,做了一些简单总结,其中复杂的部分自己也没有搞懂,所以就不发表任何总结!1、概念1.1、首先说何为Java虚拟机?Java虚拟机从字面意思直接理解就是运行Java的虚拟机器,既然是虚拟的,那么就是从物理层面来说是不存在于实际的一个机器,它不像电脑这种机器,是实际存在的,而是人们想象的一个机器,因为它能像机器一样做机器可以做的事情。1.2、为什么要使用Java虚拟机我们都知道Java语言是一种高级语言,我们可以从Java语言的特性中进行分析,Java特性包括面向.原创 2020-08-13 22:47:02 · 403 阅读 · 0 评论 -
SpringBoot整合Spring Security+JWT实现用户注册登录
最近在做一个自己的项目,前后端分离的项目,于是整合了一下SpringSecurity和JWT来实现后端系统的用户登录,自己以前没有使用过Spring Security所以这次踩坑之后记录下来。该文较长,请耐心阅读,需要整合这部分的可以给到你一些帮助。一、整合JWT1.1 pom包 <!-- jwt依赖 --> <dependency> <groupId>io.jsonwebtoken</gro.原创 2020-08-02 22:35:33 · 5272 阅读 · 11 评论 -
什么对象可以作为GC Root对象
知之为知之,不知为不知,是知也!Java虚拟机中判断对象是否可回收有两种方式:引用计数法可达性分析法对于可达性分析法,我们知道需要存在一个GC Root的对象作为起点,从这个节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象倒GC Roots没有任何引用链相连(就是从GC Roots到对象不可达)时,则证明此对象是不可用的。那么什么对象可以作为GC Root对象呢?虚拟机栈中的引用对象方法区中类静态属性引用的对象方法区中常量引用对象本地方法栈中JNI引用对象接下来就通过代.原创 2020-07-23 22:27:33 · 956 阅读 · 0 评论 -
相比synchronized,ReentrantLock新增的三个高级功能
Java在保证线程安全问题上可以从两个层面来保证线程安全:1、JVM层面,JVM层面保证线程安全是通过synchronized来实现的2、Java API,Java API方面可以通过JUC并发包中的ReentrantLock来实现在JDK1.5之前synchronized的性能是弱于ReentrantLock的,但是在JDK1.5之后,对synchrnized进行了一些优化,使得synchronized跟ReentantLock在性能上差别不大,JDK1.5之后主要对synchrnized的优化原创 2020-07-20 21:38:58 · 445 阅读 · 0 评论 -
JVM之垃圾回收三件事
GC需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?1、如何判断对象已死?引用计数算法概念:给对象添加一个引用计数器,每当一个地方引用它时,计数器数值就加1,当引用失效时,计数器就减1;任何时刻计数器数值为0的对象就不可能再被使用的,因此这个对象就需要被回收。问题:主流的Java虚拟机里面没有选用引用计数算法来管理内存,其中主要的原因时它很难解决对象之间相互循环引用的问题。可达性分析法概念:这个算法通过一系列的成为GC Roots的对象作为起始点,从这些节点原创 2020-05-26 22:28:19 · 100 阅读 · 0 评论 -
SpringBoot2.3集成ELK7.1.0
最近想用ELK做日志分析,所以先写了Demo来实验一下!1、安装ELK(Elasticsearch+Logstash+Kibana),具体安装教程百度2、查看是否安装成功,输入localhost:9200,localhost:5601,如下页面则安装成功3、pom包依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt.原创 2020-05-20 17:12:49 · 640 阅读 · 0 评论 -
使用@Reference报空指针问题
java.lang.NullPointerException: nullat com.modules.study.controller.DemoController.getDemo(DemoController.java:25) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1...原创 2020-05-04 16:48:43 · 1507 阅读 · 0 评论 -
Mybatis中的foreach用法
在MySQL中我们要实现in的筛选查询,我们一般直接通过select *from userwhere id in (2,3)这样直接通过 in 操作就可以进行筛选,但是在Mybatis中却无法直接使用 in ,这就需要使用foreach方法来实现MySQL中的 in 筛选。样式如下:select *from userwhere <if test="ids != null ...原创 2020-04-14 21:37:03 · 1104 阅读 · 0 评论 -
BigDecimal的相加问题
1、累加int型数据对于使用BigDecimal的add方法进行相加操作时,累加整型的数据没有问题,但是当我们累加BigDecimal类型的数据时,会发现数据并没有进行累加,代码如下:new BigDecimal中放入的是一个int型数据。 int i = 3; BigDecimal overdueRateTotal=new BigDecimal(0); overdueRateTotal ...原创 2020-04-13 21:21:17 · 24959 阅读 · 1 评论 -
看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了
Cookie 和 SessionHTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。Session 是什么客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMa...转载 2020-04-12 22:04:38 · 230 阅读 · 0 评论 -
运行vue项目报Module build failed: Error: Node Sass does not yet support your current environment: Windows
运行vue项目报错,报错原因是Module build failed: Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (72)此原因是因为npm版本过高导致的在vue项目中运行:npm i node-sass -D重新启动项目就ok...原创 2019-08-20 09:52:53 · 831 阅读 · 0 评论 -
Java内存溢出排查过程
前言:今天看到了敖丙的一篇关于排查堆内存溢出的博文,是自己没有接触过的知识,所以仿照过程自己也实验了一遍学习这部分的一些知识!首先我使用的是Windows电脑,所以查看堆空间的插件在这里!1、先看自己电脑的堆空间2、下载Visual GC插件3、执行相应的代码测试堆空间public class jvmController { private static final ...原创 2020-04-08 22:52:54 · 764 阅读 · 1 评论 -
com.alibaba.druid.sql.parser.ParserException: syntax error, error in :’limi1 1 limit ?,?’解决方法
报错问题:Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :’limi1 1 limit ?,?’,expect LIMIT, actual LIMIT limit前言昨晚被项目的一个BUG折磨到一点多才睡觉,这个BUG也是很蛋疼,我的执行的sql语句里多出来一个limit。...原创 2020-04-08 21:26:12 · 17586 阅读 · 0 评论 -
SpringBoot + Redis 分布式锁:模拟抢单(附实现源码)
import org.springframework.context.annotation.Configuration;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.j...原创 2020-04-01 22:05:11 · 922 阅读 · 3 评论 -
MySQL:互联网公司常用分库分表方案汇总
一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。第二种:网络IO瓶...转载 2020-03-31 22:32:49 · 147 阅读 · 0 评论 -
跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现
提到MySQL的事务,我相信对MySQL有了解的同学都能聊上几句,无论是面试求职,还是日常开发,MySQL的事务都跟我们息息相关。而事务的ACID(即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)可以说涵盖了事务的全部知识点,所以,我们不仅要知道ACID是什么,还要了解ACID背后的实现,只有这样,无论在日常开发还是面试求职,都能无...转载 2020-03-31 22:13:10 · 84 阅读 · 0 评论 -
windows安装node教程
今天在安装node的时候出现了很莫名其妙的问题,node安装成功后也配置好了环境变量,但是在命令提示符中运行node -v可以成功,但是运行npm -v一直不成功,在百度的帮助下终于成功安装成功。1、下载node官网下载地址http://nodejs.cn/download/最好不要选择太高的版本,太高的版本在运行vue项目的时候会出现一个问题,这个后面再说。下载node执行安装程序一路...原创 2019-08-20 17:32:55 · 357 阅读 · 0 评论 -
js字符串替换问题
替换全局字符串:/g用来指定所有的字符串string.replace(/被替换的字符串/g, 替换成的字符串);当替换/这个字符串时:var val = str .replace(new RegExp(被替换的字符串,'g'),替换成的字符串);...原创 2019-04-23 11:10:36 · 2204 阅读 · 0 评论 -
java虚拟机关于垃圾收集器
java内存运行时区域分为:程序计数器、虚拟机栈、本地方法栈,这三个区域会随着线程而生,随线程而灭。因此在这个三个区域不需要考虑太多回收的问题,因为方法结束或者线程结束时,则内存就会随之回收。但是在java堆和方法区中是不同的,java堆中存放着java中的对象实例,方法区中存放着java中的类型信息,因此垃圾收集器所关注的是这两部分的内存。垃圾收集器所使用的算法判断对象是否可回收:引用计数算...原创 2018-12-26 22:35:32 · 73 阅读 · 0 评论 -
导出exccel
java导出excel表格目录标题)实体类(加excel表格的注解)/**Copyright © 2012-2014 JeeSite All rights reserved.*/package com.chunqiusoft.modules.user.entity;import com.chunqiusoft.common.persistence.DataEntity;impo...转载 2018-12-24 20:59:21 · 169 阅读 · 0 评论 -
js获取字符串长度,中文占一个字符,英文占0.5字符,并截取指定长度字符串
var str = "*******************" var len = 0; var len2 = 0; for (var j = 0; j <str .length; j++) { if (str .charCodeAt(j) > 127 || str .charCodeAt(j) == 94) { len ...原创 2019-11-14 10:50:42 · 1246 阅读 · 0 评论 -
idea加载pom包很慢的问题
找到一个pom包,右击打开然后将mirrors部分替换 <mirrors> <!-- mirror Specifies a repository mirror site to use instead of a given repository. The repository that this mirror serves has an ID t...原创 2019-12-20 14:01:01 · 1170 阅读 · 0 评论 -
解密微信手机号报 last block incomplete in decryption
微信获取手机号解码问题,先上代码 //解析电话号码 public JSONObject getPhoneNumber(String session_key, String encryptedData, String iv) throws IOException { System.out.println(session_key); byte[] dataBy...原创 2020-01-14 11:41:15 · 5462 阅读 · 0 评论 -
tomcat7中get请求中文乱码问题
昨天发现放在 服务器上的后台管理系统 项目,对列表进行搜索时搜索不到,查看tomcat日志发现传递到后台的参数是乱码,因此sql语句搜索不到指定的数据,于是开始了修改 乱码的问题。首先查看服务器的编码格式通过命令locale打印出没问题是正常 的utf-8,然后查看数据库编码,但是想着数据库中存储的数据都是中文,数据库没有出现乱码应该不是数据库的问题。然后开始看项目问题,项目前端jsp页面头...原创 2019-12-19 15:01:50 · 1711 阅读 · 1 评论 -
Java内存管理总结
看博客随手记的内容,如有雷同请告知会立即删除。1、Java堆:堆是线程共享的内存区域,该区域在虚拟机启动时创建,该区域的主要目的是存放对象实例所有的对象实例以及数组都在堆上分配。堆是垃圾收集器管理的主要区域。从内存回收的角度看,现在的收集器大多采用分代收集算法,所以Java堆分为新生代和老年代,再细致一点的有Eden空间,From survivor空间和To Survivor空间。如果堆...原创 2019-08-14 14:43:28 · 101 阅读 · 0 评论 -
http请求中get和post的区别
在http请求中有四种方法,分别是get、post、put、delete对于get和post的区别如下:1、请求的可见性对于get:参数是拼接在url中的,因此参数是可见的对于post:参数是存放在body中,参数不可见2、传输限制get:get请求受浏览器的url长度的限制,传输的数据量较小post:post请求没有长度限制3、缓存性get:get会缓存浏览器数据,因此get在...原创 2020-01-16 22:54:03 · 250 阅读 · 0 评论 -
Java并发编程之原子性-Atomic源码详解
1、Atomic中存在Atmomicxxx的类,都是通过CAS来实现原子性的。对于平时适用count++问题,count++并不是线程安全的,所以在多线程情况下,适用count++会出现得到的值并不是我们期望的值。问题如下:所以为了解决此类问题我们需要用到Atomic,例如我们可以适用AtomicInteger来代替count++操作,保证线程安全。例子如下:/** * @a...原创 2020-03-31 16:05:34 · 655 阅读 · 0 评论 -
SpringBoot集成Jwt实现用户登录
前言最近正在搭建一个SpringBoot+Vue的一套后台管理系统的模板,对于用户登录的功能使用了JWT来实现的,自己在学习SpringCloud微服务时使用的就是JWT,通过Cookie来传递token,实现用户的登录状态。以下就是自己在SpringBoot中集成JWT过程。1、加入maven依赖 <!-- jwt依赖 --> <dependenc...原创 2020-03-30 22:15:10 · 1674 阅读 · 1 评论 -
关于HashMap的高频面试题
前言今天上班看到一篇博文很好,是自己没有了解过的,今天抽空也写个博文记录一下这部分知识点,加强自己的知识积累!好了言归正传:1、那你跟我讲讲HashMap的内部数据结构?目前我用的是JDK1.8版本的,内部使用数组 + 链表红黑树;2、数据结构图是怎样的?3、那你清楚HashMap的数据插入原理吗?判断数组是否为空,为空进行初始化;不为空,计算 k 的 hash ...转载 2020-03-26 22:14:10 · 972 阅读 · 2 评论 -
table表格中合并单元格问题
前言今天遇到一个前端问题,需要在td标签中添加tr,经过一番挣扎,当然是不可实现的,所以呢也就想到了合并单元格的操作,通过合并单元格,实现这样的操作。当然了自己已经好久不处理前端的问题了,所以这种问题自己也很生疏。记录一下以后也会用得上。直接上代码: <td align="center" rowspan="5" colspan="1">相关方</td> <tr...原创 2020-03-23 21:59:39 · 1161 阅读 · 0 评论 -
Java中中文转拼音方法
直接上过程:1、导入依赖:我使用的是maven,所以直接使用maven依赖 <!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j --> <dependency> <groupId>com.belerweb</groupId> ...原创 2020-03-22 20:31:49 · 400 阅读 · 0 评论 -
JQuery遍历Json的方式
前言记录今天没有掌握的知识!今天前端处理一段Json数据的时候,没有想到用什么方式,然后通过网上查看,今天做个记录,查漏补缺!遍历Json的两种方式如下: $.each(json,function(key){ let data = json[key] })以及 for (let i = 0; i < jsonData.length; i++) { let ...原创 2020-03-17 23:18:44 · 338 阅读 · 0 评论