![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java web
西城xml
To be better me
展开
-
如何证明CPU使用了缓存行?
package com.example.demo;/** * description * * @author xichengxml * @date 2021-03-12 13:43:04 */public class CacheLineDemo { static int rowCnt = 1024 * 1024; static int colCnt = 16; // 单个缓存行64byte, int占4byte,每行16个int,占一个缓存行 // 结构原创 2021-03-12 14:10:31 · 338 阅读 · 0 评论 -
为什么重写 equals 时必须重写 hashCode 方法
hashCode介绍hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 hashCode() 定义在 JDK 的 Object.java 中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)为什么要有 hashCode我们以“HashS.原创 2021-01-30 15:11:55 · 458 阅读 · 0 评论 -
String StringBuffer 和 StringBuilder 的区别
可变性简单的来说: String 类中使用 final 关键字字符数组保存字符串, privatefinal char value[],所以 String 对象是不可变的。而 StringBuilder 与StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。StringBuilder 与 Strin.原创 2021-01-30 15:10:22 · 330 阅读 · 0 评论 -
java容器学习(二)-- CopyOnWriteArrayList
继承结构特性简介在同一时间段内的更新操作会自动同步,通过JVM机制来实现,每次更新都会创建一个新的ArrayList副本。不影响读操作因为每次更新都会创建副本,写操作比较耗资源。因此该容器主要用于读操作频繁的场景底层数据结构是可变数组ArrayList的线程安全版本允许保存重复、空、不同的Object元素该容器的Iterator不支持remove()操作,否则会抛出UnsupportedOperationException。该容器的Iterator不会抛出ConcurrentModifi原创 2020-11-28 09:16:40 · 203 阅读 · 1 评论 -
java容器学习(一)
整体了解java容器及其分类分类对比Collection与Map:Collection只有值,Map是key-value形式List与Set:List允许元素重复,Set不允许Queue主要用于高并发场景CopyOnwrite主要用于读多写少的场景其他为什么没有ConcurrentTreeMap答:因为树状结构上锁比较麻烦跳跃表结构参考简书:https://www.jianshu.com/p/60d2561b821c...原创 2020-11-28 08:25:09 · 110 阅读 · 0 评论 -
并发编程之信号量--Semaphore
package com.example.demo;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;/** * description * * @author原创 2020-10-28 15:20:21 · 135 阅读 · 0 评论 -
sentinel教程2
上一篇手动加载规则需要耗时90ms,考虑性能问题,提前初始化规则package com.example.demo;import com.alibaba.csp.sentinel.slots.block.RuleConstant;import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;import java.原创 2020-10-28 15:18:53 · 120 阅读 · 0 评论 -
sentinel使用教程1
package com.example.demo;import com.alibaba.csp.sentinel.Entry;import com.alibaba.csp.sentinel.SphU;import com.alibaba.csp.sentinel.slots.block.BlockException;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.TimeUnit;/** * description原创 2020-10-28 15:16:30 · 1042 阅读 · 0 评论 -
git控制台避免每次输入密码
执行一次git config --global credential.helper store,然后git pull,输入密码,下次再pull就不需要输入密码了清密码 git config --global credential.helper wincred原创 2020-05-29 11:09:18 · 292 阅读 · 0 评论 -
常用工具jar包
lombok dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </d.原创 2020-05-16 22:29:52 · 225 阅读 · 0 评论 -
StringUtils工具类的bug
问题代码如下:String[] arr = StringUtils.split("C3uECspP2J2d12345", "( )");System.out.println(Arrays.toString(arr));打印结果为: [C3uEC, P2J2d12345]线上问题,过程不多描述;建议慎用工具类可以直接采用:“C3uECspP2J2d12345”.split...原创 2020-04-16 09:36:01 · 323 阅读 · 0 评论 -
使用git管理本地分支
项目开发久了,ide中会有很多本地分支,手动一个个去删除有点费力气,可以通过git命令快速删除本地分支切换目录cd your-project-name查看所有本地分支git branch删除本地分支git branch -d your-branch-name...原创 2020-03-24 09:51:03 · 333 阅读 · 0 评论 -
Notepad++添加读取十六进制插件HexEditor
下载地址:https://github.com/chcg/NPP_HexEdit/releases安装方式:下载压缩包,例如:HexEditor_0.9.5.19_x64.zip解压到本地目录,将文件夹更名为HexEditor打开Notepad++,选中插件,打开插件文件夹,把整个目录复制过去,一定要带目录重新打开软件,选中插件选项,可以看到view in hex选项...原创 2019-12-19 23:37:18 · 1092 阅读 · 0 评论 -
在springboot中去除get请求和post请求中的空格
controllerpackage com.example.demo.web;import lombok.Getter;import lombok.Setter;import org.springframework.web.bind.annotation.*;/** * description * @author xichengxml * @date 2019-12-03 ...原创 2019-12-03 21:44:47 · 2410 阅读 · 1 评论 -
一张图说明白消息队列
Producer:消息生产者,负责产生和发送消息到 Broker;Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue;Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理;...原创 2019-11-09 16:14:38 · 416 阅读 · 0 评论 -
如何在对外接口中合理地使用枚举
首先贴出阿里java开发手册华山版第39页的一句话【强制】 二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚举类型或者包含枚举类型的 POJO 对象关于这句话,讲一个业务场景:近期因业务发展,我们的一个系统需要增加一个枚举值,而某个接口的返回值直接使用了这个枚举。于是需要通知上游接口同步升级jar包,联调,上线。试想,如果这个枚举被10个接口使用,每个接口有10个上...原创 2019-10-30 20:35:04 · 2967 阅读 · 0 评论 -
使用idea创建一个可执行jar包
创建项目编写代码,本地调试代码结构代码package com.xicheng.swing;/** * description * * @author xichengxml * @date 2019-10-25 23:15 */import javax.swing.*;import java.awt.*;import java.awt.event.MouseAd...原创 2019-10-26 10:47:49 · 735 阅读 · 0 评论 -
如何查看自己的web项目中有多少Controller方法
示例代码如下:package com.example.demo;import org.apache.commons.lang3.ArrayUtils;import org.apache.commons.lang3.StringUtils;import org.junit.Test;import org.springframework.stereotype.Controller;imp...原创 2019-10-23 09:26:14 · 774 阅读 · 0 评论 -
git查看、修改本地账号和邮箱
打开git bash控制台,查看所有信息$ git config --list单独查看用户或邮箱信息$ git config user.name$ git config user.email修改用户信息或邮箱信息$ git config --global --unset user.name "yourName"$ git config --global --unset...原创 2019-10-15 23:40:35 · 5911 阅读 · 0 评论 -
记一次线上int溢出问题
今天吃完饭会办公室,突然接到群里的bug,线上预算数据出现了负值,如图于是一路奔回办公室,各种分析日志逻辑,分析了5个小时无果,因为印象中int的范围是21亿,而负值末尾是非零,因此一开始就否定了是int溢出的问题后来还是其他小伙伴看到了代码问题,原代码如下(左边是修改前的,右边是修改后的)我的入参是75100000.00元,乘以100转为分,70亿,所以产生了溢出于是仔细分析int...原创 2019-10-12 00:34:13 · 202 阅读 · 0 评论 -
设计模式之责任链设计模式
import com.google.gson.*;import java.lang.reflect.Type;import java.text.DateFormat;import java.util.Date;public class GsonUtil { private static Gson instance = null; public synchronize...原创 2018-07-06 09:30:52 · 201 阅读 · 0 评论 -
idea使用markdown(一)
这里是标题们标题1(前面一个#号)标题2(前面两个#号)标题3(前面三个#号)标题4(前面四个#号)写段代码吧(前后三个`,中间写代码)public class DoNothing{ public static void main(String[] args){ doNothing(); }}画个表格(前面一定要回车),竖线隔开画表格,...原创 2018-09-13 10:22:59 · 9553 阅读 · 0 评论 -
复杂json的转换
{"menus":[{"key":"测试1","type":"Channel","owner":"","title":"标题1","fav":"false","lineSelect":"false","chartSelect":&q原创 2018-06-28 16:35:47 · 1039 阅读 · 0 评论 -
Object类型转换为Integer类型
有两种写法:Integer.parseInt(obj.toString());Integer.parseInte(String.valueof(obj));原创 2018-05-25 10:31:40 · 56964 阅读 · 3 评论 -
java中如何将单词的首字母大写
package com.xicheng.demo20180421;/** * 2018年4月21日上午7:36:28 */public class Test01 { public static void main(String[] args) { String str = "this is a sentence"; String retStr = wordToUpperCase...原创 2018-04-21 07:55:58 · 3592 阅读 · 0 评论 -
List转为Tree的方法
package com.xicheng.test;import java.util.List;/** * 2018年3月26日上午7:32:37 * 树节点实体类 */public class TreeNode { private String id; private String parentId; private String name; private List<...原创 2018-03-26 07:33:43 · 3054 阅读 · 0 评论 -
java中synchronized关键字的使用
进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized.synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;2. 修饰一个方法,被修饰的方法称为同步方法,其作用的...原创 2018-03-13 20:39:52 · 172 阅读 · 0 评论 -
为什么java序列化接口没有方法却可以完成序列化
Serializable是一个所谓的标记接口,也就是说,实现这个接口是给这个类贴个标签,说它是Serializable的就可以了,具体实现是由JVM内部实现的,这个标签实际上是告诉JVM,你可以将我序列化。但这个标签不是随便贴的,如果你给一个类贴了这个标签,却在内部用到没贴这个标签的类,那运行时就可能有异常抛出。标记接口的用法现在一般被Annotation代替了,但Serializable是在An...原创 2018-03-13 20:09:24 · 1460 阅读 · 0 评论 -
restful的优点
轻量,直接基于http,不再需要任何别的诸如消息协议。get/post/put/delete为CRUD操作面向资源,一目了然,具有自解释性。数据描述简单,一般以xml,json做数据交换。无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。简单、低耦合...原创 2018-09-20 10:07:07 · 4230 阅读 · 0 评论 -
happens-before的官方解释
直接先把官方的内容粘贴过来,后续有时间翻译整理,参考链接https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.5Two actions can be ordered by a happens-before relationship. If one action happens-before another,...原创 2019-10-03 15:39:26 · 662 阅读 · 0 评论 -
springboot+vue+element实现前后不分离的应用开发
springboot和vue是当前比较流行的前后端技术,也是部分大厂的主流架构。二者实现结合有三种方式:前后不分离,通过引入的方式使用vue,也就是本文实现的方式前后半分离,前后端项目写在一个项目里,分别搭建工程,可以参考:https://github.com/xichengxml/springboot-vue-template,前端项目也通过tomcat部署管理,后端工程师使用起来比较得心...原创 2019-09-22 11:55:04 · 28441 阅读 · 8 评论 -
Idea运行项目时JVM调整
idea有时候运行项目过多,会报perGen out的错误,调整参数如下:-Xms1024M -Xmx2048M -XX:PermSize=128M -XX:MaxPermSize=256M参数解释:原创 2019-07-31 17:05:13 · 1404 阅读 · 0 评论 -
使用poi读取excel文件
注:读取的文件格式是xls,如果xlsx格式文件,可以自己通过excel文件右键→另存为,转换一下格式导包<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</ver...原创 2019-05-22 14:45:29 · 14262 阅读 · 0 评论 -
Linux安装jdk
https://docs.oracle.com/javase/8/docs/technotes/guides/install/linux_jdk.html#A1098871建议采用rpm方式安装,可以自动设置环境变量1. jdk8安装包下载位置:链接:https://pan.baidu.com/s/1md2w6GJiXzsUKzBXJmJNBA提取码:1dj72. 通过rpm方式安...原创 2018-11-08 18:01:00 · 211 阅读 · 0 评论 -
一段魔性的java代码
坐标,某大型互联网公司,有个小伙伴发来一段代码,因源码设计公司,处理之后如下:for (flag = true; father instanceof Son; father = ((Son) father).mfather) {}苦思不得其解,于是写了个demo,测试结果之后分析如下:package com.xicheng.validator;/** * @author xichen...原创 2019-03-13 18:22:10 · 313 阅读 · 0 评论 -
websocket简介
websocket简介websocket简介websocket简介HTTP的缺点websocket的优点websocket和HTTP对比原生websocket的缺点stomp over websocket使用简介HTTP的缺点只能由client发请求再由server返回请求结果, server是不能主动发请求到client的. 遇到的问题: ...原创 2019-03-14 11:06:05 · 712 阅读 · 0 评论 -
java程序员成长路线
第一版技术架构,摘自网上2018年最流行的后端技术成长路线,待完善。原创 2019-01-29 18:01:15 · 1305 阅读 · 0 评论 -
如何模拟真正的高并发请求(countdownlatch和cyclicbarrier)
代码参考importNew上面的实例,做了优化,更便于理解实例1,使用CountDownLatch模拟高并发场景化:有一道阻塞墙,站着一个管理员,手里拿着N(线程数)个牌子,到达一个线程,把牌子给该线程,当手里牌子都发完时,打开墙门,放行所有线程通过package com.xicheng.concurrent;import java.util.concurrent.CountDownLa...原创 2019-01-28 10:30:35 · 6084 阅读 · 3 评论 -
svn项目迁移git,以及git库迁移
svn迁移git:将svn代码克隆到本地: git svn clone http://fakesvn.com/fakerepo/fakebranch --no-metadata进入到项目文件夹,关联到git:git remote add origin http://fakegit.com/git/fakerepo.git提交:git push -f origin master:fakebr...原创 2019-07-31 17:18:01 · 232 阅读 · 0 评论 -
java中抽象类和接口的区别
1.Main difference is methods of a Java interface are implicitly abstract and cannot have implementations. A Java abstract class can have instance methods that implements a default behavior.2.Varia原创 2017-10-23 17:35:47 · 193 阅读 · 0 评论