- 博客(147)
- 收藏
- 关注
原创 【安全】nginx防止host头攻击
系统上线之前要经过安全测试,安全测试中有这么一项,请求头中的host字段,这个值随便修改之后,响应还可以正常返回,这种这种就是有风险的,是测试不通过的,默认情况下,浏览器地址栏中的URL和请求头中的host字段值的ip和端口(或者是域名)是一样的,进行安全测试的时候使用会使用拦截工具,把请求头中的host头进行篡改。在nginx.config的server块中配置。
2025-03-29 21:55:29
281
原创 java调用python2.x、python3.x版本
链接:https://pan.baidu.com/s/1iZ6JaQIz5qs0qhPbO-708g?pwd=cn9s 提取码:cn9s 复制这段内容后打开百度网盘手机App,操作更方便哦。视频:https://www.bilibili.com/video/BV13F411V7xc/
2025-02-22 17:44:56
94
原创 freemark 使用ftl文件 生成word
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>import freemarker.template.TemplateException;import java...
2022-05-27 15:21:34
465
原创 MyBatis一级缓存和二级缓存命中场景
MyBatis一级缓存命中场景MyBatis一级缓存是与会话(sqlSession)相关的,会话关闭后,一级缓存会被清空一:运行时参数相关:1.同一个会话(sqlSession)2,sql语句和参数形同3、相同的statementId4.RowBound相同二:配置与操作相关的1、未手动清空缓存(提交或回滚)2.未配置flushCahch=true3.未执行update、delete、insert语句4.缓存作用域不是statement备注:和spring集成后,非事务环境下,不走一
2022-03-09 21:48:05
743
原创 springBoot过滤器、拦截器配置使用
拦截器与过滤器的区别 :拦截器是基于java的反射机制的,而过滤器是基于函数回调。拦截器不依赖与servlet容器,过滤器依赖与servlet容器。拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次拦截器的代码实现。Filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而inter
2022-02-28 11:11:36
1005
原创 后台系统登录一般流程
登录整个流程1.异步请求后端得到验证码(生成验证码的答案后存入redis,uuid作为key),验证码图片以base64的编码和uuid返回前端2.根据用户名和密码、验证码值、uuid传递到后端,为了效率,先判断验证码值是否正确,正确的话,再根据用户名和密码去数据库进行匹配,匹配时,查询用户表、部门表、用户与角色的关联表、角色表获取当中的有用字段信息,再使用用户id去查询权限表、角色权限关联表、用户角色关联表、角色表(因其中功能涉及角色、权限状态)返回权限标识如(system:role:edit多个的
2022-02-25 16:18:26
8023
原创 maven 命令 分环境 打包 指定pom文件
mvn clean package -DskipTests -Pdev -f pom_2.xml备注:clean:清除项目中target目录package: 打包-DskipTests :跳过测试文件-Pdev :dev代表对应的环境-f pom_2.xml :pom_2.xml代表指定的pom文件
2021-07-16 17:48:27
4405
原创 java List<Object> 深拷贝
//list深度拷贝List<Object> newList = new ArrayList<>();org.apache.commons.collections4.CollectionUtils.addAll(newList, new Object[list.size()]);Collections.copy(newList, list);备注:list为源数据
2021-05-27 10:33:18
845
原创 java 根据对应的年份取出在所有年份中的位置及取对应的数值
public class TestF { public static void main(String[] args) { String [] quanYearArray={"2016","2017","2018","2019","2020"}; String [] haveYearArray={"2018","2020"}; String [] haveValueYearArray={"2018的值","2020的值"}; Map .
2021-04-28 13:00:09
251
转载 VMware12 CentOS 7 NAT方式连接网络配置
转自https://blog.youkuaiyun.com/u013305747/article/details/78375946VMware、CentOS 7 安装略过(网上教程一堆),以下是安装完成后以NAT方式链接网络的配置,需要注意的几个点:一、虚拟网络编辑器配置1、VMnet8设置(不需要改动)2、NAT设置(不需要改动)3、DHCP设置(CentOS IP地址段设置,不需要改动)二、虚拟机设置(网络适配器选择NAT模式)三、主机VMware Virtual Ethe
2021-04-22 11:18:08
253
转载 java 线上应用故障排查之二:高内存占用
前一篇介绍了java线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space(jdk1.7及之前版本)2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogja...
2021-04-13 11:15:42
667
转载 java 线上应用故障排查之一:高CPU占用
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?首先显示
2021-04-13 10:58:00
197
原创 java 通过反射创建对象并给属性赋值
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ReflectPO { private String h1; private String h2; public String getH1() { return h1; } public void setH1(String h1) { .
2021-04-12 17:17:22
1381
原创 java 通过网络流 把文件写到某个地方
@Testpublic void testCopyFile() throws Exception{ URL url = null;//把远程文件地址转换成URL格式 InputStream fin=null; FileOutputStream fileOut=null; try { url = new URL("http://ip地址/6456b1051fa6531cf9b36cacb9a0e92a.xlsx"); fin = url.o.
2021-04-08 17:29:44
398
原创 java 流与byte 互相转换,并与base64编码转换
在java 文件操作过程中,经常会用到stream to byte 还有 byteto stream ,有时还需将流转换成base64 编码,然后才好传输, 一旦受到这个base64的字符串,接收端,需要将这个还原成流,保存为文件。下面就是几个主要方法:1. streamtobyte:public static byte[] steamToByte(InputStream input) throws IOException{ ByteArrayOutputStream...
2021-04-08 10:11:59
1882
原创 centos7普通用户和root用户 安装python3
一:普通用户python -V,看下之前系统中是否有python,看这个是因为安装python3时的基本环境都已具备了,如下图中的是python2版本官网下载 Python-3.7.9.tar.xz 安装包解压 tar -xvJf Python-3.7.9.tar.xz 编译安装 创建编译目录mkdir /home/username/python3 备注:username为用户名 cd Python-3.7.9 ./configure --prefix=/home/user...
2021-03-18 17:52:23
2668
1
原创 java 多个数组 按照一个数组元素排序 其他数组值也跟着变
//前提,每个数组的元素个数一致 ,使用对象是最简单的方法,下边这种方法没有使用对象public static void main(String[] args) {String[] xValue={"1","2","3","4","5"};String[] xNote={"1月1日0时","1月1日1时","1月1日2时","1月1日3时","1月1日4时"};String[] xNoteNew=new String[xNote.length];//String[] xValueNew=new
2021-01-26 14:52:33
1299
原创 java 远程调用 RestTemplate 传json
@SpringBootTestpublic class NyyTest { private Logger logger = LoggerFactory.getLogger(NyyTest.class); @Test public void initProcess() { RestTemplate restTemplate=new RestTemplate(); String url ="http://aaa"; HttpHeader...
2021-01-20 18:05:18
332
原创 列表 转成 树形结构
List<Abc> chainList = mapper.selectList(bb);for (int i = chainList.size() - 1; i >= 0; i--) { // 当前要移动的记录 Abc child = chainList.get(i); // 如果当前节点没有父节点,则不用往下了 if (StringUtils.isEmpty(child.getParent())) { continue; }...
2020-12-10 18:05:59
706
原创 高并发系统的演进(如何设计一个高并发系统架构)
一:系统拆分:将一个系统拆分为多个子系统,用dubbo或springCloud来搞,然后每个系统连接一个数据库,这样就可以对并发访问起到一定的作用。二:缓存:必须得用缓存。大部分的高并发场景,都是读多写少,完全可以在数据库和缓存中都写一份,然后读的时候大量都是走的缓存。毕竟redis轻松单机几万的并发是完全没有问题的。三:MQ:可能你还是会出现高并发写的场景,比如一个业务操作里要频繁操作数据库多次,这时候就得用MQ了,大量写请求到MQ里,后边的系统消费后慢慢写,控制在mysql承载范围之内,MQ单机
2020-12-05 10:45:15
235
原创 Redis 过期策略 内存淘汰机制 原理
一:删除策略1.定期删除 redis默认每隔100ms会随机抽取一些设置了过期的key进行检查其是否过期,如果过期了就删除2.惰性删除 因定期删除可能导致很多过期key到了时间并没有被删除掉,这就用到了惰性删除,就是你在获取某个key的时候,redis会检查下,这个key是否设置了过期时间,如果设置了而且已经过期了,就会删除而且不会给你返回任何东西,并不是key到时间就被删除掉,而是你查询这个key的时候,redis才会进行检查二:内存淘汰策略如果redis的内存占用过多的时候,此时会进行内
2020-11-26 21:52:32
428
原创 Redis 单线程原理 示意图
1.客户端向redis server发送socket连接到server socket,server socket接收到请求后会产生AE-READBLE事件,IO多路复用程序会监听到AE-READBLE事件,IO多路复用程序中有一个队列,客户端来的请求会进入到里边,后边就是文件事件分派器,接着就到连接应答处理器,server socket接收到连接后,命令请求处理器会读出来数据,在自己内存中完成key.value数据处理,命令回复处理器处理完后,IO多路复用程序会监听AE-WRITEABLE事件,再返回到客户
2020-11-26 17:09:37
341
原创 redis memcahe 区别
1.redis单线程,memcache多线程2.redis数据类型更丰富,memcache比较单一3.reids官方支持原生cluster模式,memcache不支持
2020-11-26 15:58:51
136
原创 elasticSearch es 性能优化
1.写入到es中的数据量尽量少于filesystem cache的剩余内存2.es中的数据放那些需要搜索的必要信息3.冷热数据分离,假如有6条机器,两个索引,一个索引放热数据,一个索引放冷数据,每个索引3个shard,3台机器放热数据index,另外3台机器放冷数据index,这样你大部分时间在访问热数据,热数据都在filesystem cache中,这样访问性能是很高的,另外冷数据的话,大部分都在磁盘上,即使性能差点,也是少部分人在访问。4.设计es中的数据模型,例如订单表、订单条目表o.
2020-11-25 17:19:35
145
原创 elasticSearch es 概念 写入 读取 搜索数据 原理
1.index 相当于数据库中的一张表2.mapping相当于字段表结构的定义(字段及类型)3.document代表数据表中的一条数据,每个document中有多个filed,每个filed就代表这个document中一个字段的值4.shard 每个index会被拆成多个shard,每个shard中放index的一部分数据,每个shard可能分在不同的机器上,每个shard都有一个副本,主数据和副本不在同一台机器,primary shard 会自动同步到replication shard上m
2020-11-24 17:36:01
283
原创 RabbitMQ 高可用 幂等 消息丢失 顺序消费
1.高可用:RabbitMQ的高可用指的是镜像模式的集群,queue的元数据和消息数据都存在每个节点上,不是分布式的(中小公司推荐,qps万级)2.(重复消息)幂等:不管生产者发送几条相同的消息到mq,消费者消费的时候,只消费一条,实现思路1.例如写库,订单表,生产者生产消息的时候在消息体中加入一个唯一标识(一个字段或者多个字段组合),这样在消费者消费的时候,首先去从库中查看是否有这个标识的数据,如果有的话,直接丢掉就行。3.消息丢失:分为三个部分,分别为3.1:生产者消息是否发送到mq服务器中
2020-11-23 17:49:36
170
转载 转java通过身份证号码获取出生日期、性别、年龄
转自:https://blog.youkuaiyun.com/u011199063/article/details/79564587身份证号码: 15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码 18位:6位地址码+8位出生年月日(19900101代表1990年1月1日出生)+3位顺序码+1位校验码 1 2 3地区码: 1、 第一、二位表示省(自治区、直辖市、特别行政区)。 2、 第三、四位表示市(地级市、自治州、..
2020-11-12 11:08:55
1575
转载 转 Springboot的异步线程池 四种线程池拒绝策略
1:定义线程池 1 2 3 4 5 6 7 8 9 10 11 12 13 一般写到启动类中,当做启动类中的内部类 @EnableAsync @Configuration classTaskPoolConfig { @Bean("taskExecutor") publicE...
2020-10-29 16:19:42
2297
转载 转 java8一行代码获取昨天时间字符串
import java.time.Instant;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;String date = DateTimeFormatter.ofPattern("yyyy-MM-dd") .withZone(ZoneId.systemDefault()).format(Instant.now().minus(1,
2020-10-28 17:35:37
573
原创 oracle 使用sql查询表注释和列注释及数据类型等
SELECTt1.Table_Name || chr(13) || t3.comments AS "表名称及说明", ROWNUM , t1.Column_Name AS "字段名称", t1.DATA_TYPE AS "数据类型", t1.DATA_LENGTH AS "长度", t1.NullAble ...
2020-10-28 11:58:33
724
原创 web 统一打印出接到前端的请求参数是什么 调试使用
public class MyAuthorityInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//请求中Controller中的方法名HandlerMethod handlerMethod = (Ha.
2020-10-22 14:33:55
421
原创 SpringMvc 需要对返回的json做统一的处理时用
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@ControllerAdvicepublic class MyResponseBodyAdvice implements ResponseBodyAdvice {@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, Media.
2020-10-22 14:23:32
349
原创 Cotroller 当遇到返回值和方法返回值不一样时的处理
大致代码如下:HttpServletResponse response;response.reset();//note 这里要添加reset,否则报异常 getWriter() has already been called for this response.response.setCharacterEncoding("UTF-8");//note 这里要设置编码,否则会乱码response.setContentType("application/json;charset=UTF-8");//.
2020-10-22 14:15:23
194
原创 SpringWeb 中的全局异常处理 两种方式
import org.springframework.stereotype.Component;import org.springframework.stereotype.Repository;import org.springframework.stereotype.Service;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.Model.
2020-10-22 14:08:41
398
原创 java 链式调用经典写法
public class Chain {private List<ChainHandler> handlers; private int index = 0; public Chain(List<ChainHandler> handlers) { this.handlers = handlers; } public void proceed(){ if(index >= handlers.size())...
2020-10-14 20:55:14
2230
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人