- 博客(53)
- 资源 (30)
- 收藏
- 关注
原创 纯java后台生成带ECharts的PDF文档(phantomjs)
一、需求没有HTML预览页面,要求前台提交数据后,在服务端生成一份带ECharts图表的PDF文件二、分析存在以下几个难点:1、没有浏览器,怎么渲染生成ECharts图并且放到PDF中2、后台生成PDF的方案比较少,怎么保证样式,同时要有可维护性解决方案:1、直接生成PDF局限性较大,可以先生成word,再转PDF2、寻找一个工具,可以把ECharts转成图片,插入到word中三、实现这里我以生成一个简历PDF为例1、word的生成采用POI-TL转为模板官网地址:http://d
2022-06-04 11:40:06
4287
9
原创 springboot项目中,JSESSIONID互相覆盖问题
一、现象同一台服务器有两个不同域A(端口:9000)和域B(端口:8000),应用CA在域A中,应用CB在域B中,都使用session保存登录状态,进行如下操作在同一浏览器中,先登录应用CA,再登录应用CB,然后切回应用CA,发现CA的session丢失,需要重新登录经过调查发现,切回CA的时候,JSESSIONID被覆盖成了请求CB的JSESSIONID二、原因因cookie冲突导致session丢失三、原理1. session原理我们在保存登录状态的时候,后台服务一般都会编写如下代码
2022-01-14 15:34:11
4099
14
原创 上传jar包到maven私服仓库nexus
1. 点击Repositories2. 选择一个目录,准备上传3. 填写配置信息4. 选择jar包,点击上传
2021-12-27 11:09:17
527
原创 前后端分离,前端获取文件流下载文件
一、 GET1. 后端接口@GetMapping("/test")public void testGet(HttpServletResponse response) throws IOException { FileInputStream in = null; ServletOutputStream out = null; try { in = new FileInputStream("/Users/weiliangchun/Downloads/test.png
2021-12-08 11:10:24
5529
原创 使用AOP给项目添加登录日志
1. 前言常规给项目添加登录日志的写法@PostMapping("/login")public String login(HttpServletRequest request) { try { //登录相关业务代码... //添加登录成功日志 loginLogMapper.insert(entity); } catch(Exception e) { //添加登录失败日志 loginLogMapper.insert(entity); }}这种写法有利有弊,个人总结如下优
2021-12-03 17:46:57
1066
原创 使用多线程并行处理任务,提高效率
案例详解电商app中,商品详情页,开发一个接口提供以下信息商品基本信息(名称、价格、库存等)商品图片列表商品描述信息数据库中我们用了3张表存储上面的信息商品基本信息表:t_goods(字段:id、名称、价格、库存等)商品图片信息表:t_goods_imgs(字段:id、goods_id、图片路径等)商品描述信息表:t_goods_ext(字段:id、goods_id、描述信息等)常规写法,伪代码如下:public Map<String,Object> detail(l
2021-11-17 14:39:21
1840
2
原创 java多线程遍历处理list集合
开发过程中经常遇到如下需求,拿到一个list数据,需要遍历它然后请求第三方接口,然后根据返回结果做一些事常规写法public static void main(String[] args) { List<User> list = getList(); test1(list);}//假设有500条数据static List<User> getList() { List<User> list = new ArrayList<>(
2021-11-08 21:50:49
10368
4
原创 linux安装jdk
1. 下载jdk8官网下载2. 解压下载好的文件上传到服务器 /usr/local目录(软件一般安装到这个目录,你也可以安装到自己的目录)使用解压命令解压tar -zxvf jdk-8u311-linux-x64.tar.gz3. 配置环境变量编辑/etc/profilevim /etc/profile加入以下内容export JAVA_HOME=/usr/local/jdk1.8.0_311export JRE_HOME=${JAVA_HOME}/jreexport CLAS
2021-11-05 16:58:56
113
原创 基于springboot的maven父子工程脚手架
github直接自取:project-managermaven父子工程,api模块采用springboot1. 工程说明1.1 适用场景同一套数据模型,需要开发手机端、运营管理端等几套api,存在公共的实体类,mapper接口,并且项目需求较为简单,不需要采用微服务架构1.2 技术框架该工程整体技术框架为springboot + mybatis-plus + mysql,在此基础上,保留了以下配置一些必要的工具:fastjson、hutool-all、lombok、spring-boot-
2021-11-04 20:12:07
401
转载 nginx配置安装到指定目录
原文:https://blog.youkuaiyun.com/qq_34228868/article/details/104461338nginx安装的时候不指定安装目录,会默认安装到/usr/local/nginx下,因此如果需要改变安装目录的同学,可以按照以下方法安装。1. 一键安装以下四个依赖yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2. 下载nginx安装文件并解压//下载tar包cd /tmp/wg
2021-10-25 17:46:54
6724
原创 MySQL中int、bigint、smallint 和 tinyint 的区别与长度的含义
bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。bigint已经有长度了,在mysql建表中的length,只是用于显示的位数int从-2^31 (-2,147,483,648)到 2^31 – 1 (2,147,483,647)的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为integer。smallint从 -2^15 (-
2021-10-14 16:02:43
899
原创 MySQL中varchar和char的区别,varchar(50)中50的含义
varchar和char的区别varchar与char的区别就是,char是一种固定长度的类型,varchar则是一种可变长度的类型尽可能的使用varchar代替char,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。varchar(50)表示的含义varchar(50)中50的涵义为最多存放50个字符,varchar(50)和varchar(200)存储hello字符串所占空间一样,但后者在排序时会消耗更多内存,因为order by
2021-10-14 15:59:10
4547
原创 JSchException: Algorithm negotiation fail
背景一个需求功能用到了SFTP文件上传的功能,使用的是之前封装好的工具类。生产环境突然出现了问题,一直报错com.jcraft.jsch.JSchException: Algorithm negotiation fail at com.jcraft.jsch.Session.receive_kexinit(Session.java:583) ~[jsch-0.1.51.jar:na] at com.jcraft.jsch.Session.connect(Session.
2021-10-01 17:57:32
4534
1
原创 Centos8设置Redis开机自启
在系统服务目录里创建redis.service文件vim /etc/systemd/system/redis.service写入以下内容[Unit]Description=redis-serverAfter=network.target[Service]Type=forking# 注意这一行改成你自己的配置ExecStart=/usr/local/redis-4.0.7/src/redis-server /usr/local/redis-cluster/6379/redis.conf.
2021-09-08 22:45:46
1525
原创 Centos8搭建Redis Cluster集群
准备集群搭建之前需要先安装单机版# 进入/usr/local目录cd /usr/local# 下载rediswget http://download.redis.io/releases/redis-4.0.7.tar.gz# 解压tar -zxvf redis-4.0.7.tar.gz# 编译 需要有gcc环境,如果没有需要提前安装cd redis-4.0.7make && make install设置集群配置文件Redis Cluster至少需要6个节点,我这里是
2021-09-08 22:34:07
586
2
原创 java代码修改yml配置文件
背景参加一个比赛,测评程序每次在测试的时候,都是随机分配3台服务器,IP地址不固定。程序提供一个接口,每次测评开始前会传过来3个IP地址,需要动态修改yml配置文件中程序连接的redis集群节点添加依赖<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId></dependency>修改文件的工具类package co
2021-09-06 13:54:23
5510
1
原创 MySQL分页查询优化
一、前言分页查询的时候,我们一般使用SELECT * FROM user LIMIT 1000,10;当表中的数据非常大,达到百万级别,查询速度非常的慢,一般我们有下面两种方法提升查询效率方法1:SELECT * FROM user WHERE id >= (SELECT id FROM user LIMIT 1000,1) LIMIT 1;方法2:SELECT * FROM user a JOIN (SELECT id FROM user LIMIT 1000,10) b ON a
2021-07-19 22:46:14
207
原创 MySQL根据某个字段判断新增或更新
有一个 USER表,字段有:id、username、password、email、phone我们需要开发一个创建用户接口,username唯一,判断username是否存在,如果存在,就更新,不存在,就新增看一下正常代码// 创建用户public void createUser(User user) { User userInfo = this.getUserByName(user.getUsername()); if (null != userInfo) { use
2021-07-16 15:16:36
4376
原创 apache ab压测工具,看完就会
安装方法百度很多,不做介绍一、 压测的几个概念1. QPSQPS Queries Per Second 是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。2. TPSTPS Transactions Per Second 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,
2021-07-15 21:32:38
469
原创 EXPLAIN各个字段是什么意思
mysql使用explain xxx可以分析sql语句的性能,本文详细总结一下每个字段的意义MYSQL 5.6.3以前只能EXPLAIN SELECT; MYSQL5.6.3以后就可以EXPLAIN SELECT,UPDATE,DELETE概述首先看一个简单的示例mysql> explain select * from staff;+----+-------------+-------+------+---------------+------+---------+------+------
2021-07-09 13:58:53
808
2
原创 HashMap为什么是线程不安全的
前言面试常常被问到HashMap为什么是线程不安全的。今天从源码分析为什么不安全JDK1.7版本不安全体现在死循环、数据丢失、数据覆盖问题上。JDK1.8版本修复了前两个问题,但是依然存在数据覆盖问题。JDK1.7中的线程不安全1.7中的不安全主要发生在扩容方法,根源在transfer()方法,1.7版本的transfer()方法如下:void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.l
2021-07-07 21:37:23
235
1
原创 小白也会用的SQL优化工具推荐
1. SOAR/SOAR-WEB强烈推荐小米开源的SQL优化和改写的自动化工具跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)目前只支持 MySQL 语法族协议的 SQL 优化支持基于启发式算法的语句优化支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)支持 EXPLAIN 信息丰富解读支持 SQL 指纹、压缩和美化支持同一张表多条 ALTER 请求合并支持自定义规则的 SQL 改写安装步骤推
2021-07-06 18:06:30
8845
5
原创 看完这篇,搞定SpringBoot多数据源
添加多数据源配置spring.datasource.platform.jdbc-url=jdbc:mysql://localhost:3306/platformspring.datasource.platform.username=rootspring.datasource.platform.password=rootspring.datasource.platform.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.ma
2021-06-24 20:49:28
461
原创 离线安装部署YApi
如果主机网络好的情况,推荐在线安装,可视化安装也更加方便,在线安装教程很多,不多赘述一、下载离线安装包链接: https://pan.baidu.com/s/1rRYJaXKqVSgDzb-JFSQAgw 提取码: yjcb二、安装nodejs如果有nodejs环境,可以跳过这一步# 新建文件夹mkdir nodejs# 解压文件tar xvf node-v12.13.0-linux-x64.tar.xz# 移动文件mv node-v12.13.0-linux-x64.tar.xz/*
2021-05-28 14:59:38
2800
4
原创 FinalShell配置隧道
跳转机:172.18.10.1:22目标主机:10.0.0.1:90111. 配置跳转机打开新增SSH连接,配置跳转机的主机地址、端口、用户名、密码2. 配置隧道名称:随便填,比如我喜欢用目标主机的ip监听端口:重要!!! 需要记住,待会配置目标主机连接的时候,需要用到绑定ip:本地ip,127.0.0.1目前地址:目标主机ip目标端口:目标主机端口3. 新增目的主机连接主机:填写第2步隧道里面的绑定ip端口:第2步隧道里面的监听端口认证:目标主机的用户名密码4. 使用先
2021-05-10 11:19:21
4993
原创 为什么我的接口响应时间这么长?记一次接口响应时间过长问题排查
一、情况描述某saas应用,在请求一个接口的时候,发现响应时间非常的慢,利用前台google浏览器的F12调试,发现响应时间超过2秒二、问题排查项目整体采用前后端分离,前端通过nginx实现负载转发,请求后端接口,所以首先排查是不是前台的问题,发生了某些很耗时的操作。1. 查看nginx的响应时间通过查看nginx的日志信息,发现nginx对接口的响应时间,差不多也在2.4秒,排除了前台的问题因为nginx的性能非常高,所以一般情况下,从nginx到后端,不太可能会耗时这么久2. 查看后端
2021-05-07 17:25:49
15259
原创 从阿里中台分析企业中台架构演变过程
中台是什么?中台是一套结合互联网技术和行业特性,将企业核心能力以共享服务中心进行沉淀,形成“大中台、小前台“的组织和业务机制,供企业快速低成本的进行业务创新的企业架构中台的目的是**“提供企业快速低成本创新的能力”,核心是“构建企业共享服务中心”,过程是构建“大中台、小前台“**组织和业务机制。中台将整个企业的数字运营能力、产品技术能力,对各业务前台形成强力支撑阿里巴巴的中台架构上图可以看出,阿里巴巴有超过数十个业务单元(如淘宝、天猫、聚划算、菜鸟)均不是独立构建在阿里云之上,在后端阿里云技术平
2021-04-12 14:31:45
930
1
原创 java死锁怎么排查
什么是线程死锁死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,在无外力作用的情况下,这些线程会 直相互等待而无法继续运行下去。如图所示在图中,线程A已经持有了资源2, 同时还想申请资源1,线程B已经持有了资源 1,它同时还想申请资源2 ,所以线程A和线程B就因为相互等待对方已经持有的资源,而进入了死锁状态。死锁的必要条件互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待
2021-04-09 21:03:00
164
原创 HashMap源码分析
HashMap是我们日常编码中经常用到的一种集合,也是面试的高频问题。作为一个合格的码农,它的一些常用方法的底层源码,应当要能掌握今天带大家一起阅读下HashMap的源码,分析它的底层实现原理。本文的源码是基于JDK1.81. 数据结构这里简单介绍下,在1.8之前,HashMap数据结构是基于数组+链表,左边为哈希数组,当发生哈希冲突的时候(就是有2个元素,根据内部的哈希运算,得到在数组上的位置是一样的),就把元素放到链表中在1.8之后,是基于数组+链表+红黑树,在链表长度超过某个阈值的时候,链表
2021-03-31 23:38:41
210
1
原创 transient关键字作用
用java这么久,竟然发现不知道transient关键字的作用总的来说:transient修饰的关键字不会被序列化一、序列化和反序列化名词解释序列化:把java对象写入到I/O流 ,即把java对象转换为字节序列,并将字节序列保存在磁盘上,或通过网络传输反序列化:从I/O流中恢复对象,即把得到的字节序列恢复成java对象序列化的方法实现序列化有两种方法:实现Serializable接口或Externalizable接口二、transient的作用一旦变量被transient修饰,变量
2021-03-19 17:28:12
3216
原创 idea阅读jdk源码环境搭建
此方法可以在源代码写注释,记笔记1、新建项目新建一个普通java项目2、新建文件夹在src目录下新建两个文件夹jdk8:放jdk源码test:放测试的代码3、导入jdk源码jdk源码在哪找呢,在你的jdk安装目录里面,有个src.zip文件拷贝这个压缩包,到刚刚新建的项目的文件夹jdk8下解压,解压后的文件结构4、配置调试环境扩大编译的内存,否则会报内存不足设置方法:Preferences --> Build,Execution,Deployment -->
2021-03-18 16:21:10
312
原创 jenkins离线安装插件
这种方法适用于主机和外网不通,无法在线下载的情况1. 准备插件索引:https://plugins.jenkins.io/下载地址:http://updates.jenkins-ci.org/download/plugins/这两个地址后面会有用2. 选择插件比如,我要安装git插件打开上面的插件索引地址:https://plugins.jenkins.io/在这里输入插件的名称:git,点击搜索点进去,复制这个id3. 下载插件打开上面的下载地址:http://updates.
2021-03-09 17:27:26
6683
1
原创 静态域、静态变量、静态方法
文章目录静态域静态常量静态方法静态域static关键字修饰的域class Employee { private static int nextId = 1; private int id;}这里Employee对象有一个实例域id和一个静态域nextId,每一个Employee对象都有一个实例域id,但是所有的对象共享一个静态域nextId。假设有1000个Employee对象,则有1000个实例域id,但是,只有一个静态域nextId。即使没有一个Employee对象,静态域nextId
2021-03-06 10:49:18
231
原创 redis实现商品销量排行榜
前言需要统计某个商家商品的实时销量排行,可以使用SQL语句,根据销量字段排序,但是这个方法需要进行全表扫描,当数据量非常大的时候,效率很低redis自带的数据结构zset是有序列表,可以结合redis更加高效的得到实时排行数据数据准备1. 表准备CREATE TABLE `mall` ( `id` bigint(20) NOT NULL, `name` varchar(20) DEFAULT NULL COMMENT '商品名称', `stock` bigint(20) DEFAULT
2021-01-15 21:50:21
3059
原创 2020字节跳动数据库面试题及答案(二)—— NoSQL部分
本文答案整理为原创,转载请说明出处文章目录redis 的底层数据结构有哪些redis 中的 SDS 和 C 语言中的字符串有什么区别,优点是什么redis 中的字典是如何实现的,如何解决冲突和扩容redis 的跳表的使用场景是什么,可以实现一下吗redis 缓存穿透,缓存击穿,缓存雪崩,热点数据集中失效redis 的淘汰策略,来写一下 LRU 吧redis 的持久化方式,RDB 和 AOF 分别的使用场景redis 如何处理事务redis 为什么那么快?redis 是单线程为什么还那么快?redis .
2021-01-13 00:21:31
3827
2
原创 2020字节跳动数据库面试题及答案
文章目录数据库三范式分别说一下范式和反范式的优缺点Mysql 数据库索引。B+ 树和 B 树的区别为什么 B+ 树比 B 树更适合应用于数据库索引,除了数据库索引,还有什么地方用到了(操作系统的文件索引)聚簇索引和非聚簇索引前缀索引和覆盖索引介绍一下数据库的事务Mysql 有哪些隔离级别Mysql 什么情况会造成脏读、不可重复读、幻读?如何解决Mysql 在可重复读的隔离级别下会不会有幻读的情况,为什么?Mysql 事务是如何实现的Binlog 和 Redo log 的区别是什么,分别是什么用?谈一谈 MV
2020-12-31 10:51:53
13736
3
原创 MySQL可重复读级别会不会造成幻读
一、定义在《高性能MySQL》一书中,是这样描述的根据书上的描述,MySQL的可重复读隔离级别通过MVCC机制,解决了幻读的问题,所以不会造成幻读二、测试本文默认你已经知道以下的命令1. 查询当前会话隔离级别SELECT @@tx_isolation;2. 设置当前会话隔离级别set SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;3. 查询正在进行中的事务SELECT * FROM information_schema.IN
2020-12-11 20:36:08
3598
6
原创 二叉树的前序遍历、中序遍历、后序遍历
一、前序遍历1. 定义若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树2. 算法typedef Struct BiTNode { char data; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;void preOrderTraverse(BiTree T) { if(NULL == T) return; printf("%c",T->data); preOrderTr
2020-12-02 22:07:17
904
原创 多线程使用executor.submit(callable).get()不并发执行问题
业务场景for循环处理数据,串行执行效率很慢,所以想用多线程并行处理,提高效率原来的代码如下public class ExecutorTest { public static void main(String[] args) { try { AtomicLong total = new AtomicLong(0); ExecutorService executor = Executors.newFixedThreadPool(8)
2020-11-24 16:49:03
3012
1
TortoiseGit一键安装版和中文语言包
2020-10-12
junit-4.12.jar
2017-10-14
ssh框架整合jar包
2017-09-25
ssh框架整合所有的jar包
2017-09-25
java微信公众号开发用到的jar包,有httpclient
2017-09-21
微信开发jar包
2017-09-21
httpclient的jar包
2017-09-21
ValidateCode验证码jar包
2017-09-21
[免费]-----J2SE中文文档chm
2017-09-21
jackson包jar包2.8-1分下载
2017-09-20
1分下载-jackson最全jar包.zip
2017-09-20
spring+springMVC+hibernate整合框架jar包
2017-09-15
hibernate基础jar包
2017-09-14
spring框架搭建必要的jar包
2017-09-06
Git工具64位安装版exe
2017-09-05
jsp&servlet学习笔记(第2版)随书光盘
2017-08-29
java学习笔记——异常
2017-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人