- 博客(58)
- 收藏
- 关注
原创 idea 启动Flask时host设置和端口设置,以及host=0.0.0.0和127.0.0.1的区别
idea flask 0.0.0.0 port
2022-08-23 13:39:34
7940
原创 Go Slice 切片函数间传递到底用变量还是指针?Go语言数据类型,值传递和引用变量类型的思考
go 语言,切片,引用类型,函数间传递,变量还是指针
2021-11-28 22:24:26
2382
原创 python datetime 求每月的1号的凌晨的时间戳
from datetime import datetime, timezone, timedeltaif __name__ == "__main__": jan = datetime.strptime("2019-12-31 16:00:00.000Z", "%Y-%m-%d %H:%M:%S.%fZ") jan = jan.astimezone(timezone(timedelta(hours=8))) jan = jan + timedelta(hours=8) y.
2021-11-28 12:37:56
1012
原创 Go 并发时限制最大并发度并获取协程结果的两种方式;for range 和for index获取缓冲通道
1.要并发执行的大量任务,假如300个package mainimport "fmt"func task() { fmt.Println("task...")}func main() { for i := 0; i < 300; i++ { go task() } println("main over...")}执行如上代码,会出现task协程全部未运行结束main协程就运行结束了。但是往往我们需要task协程全部运行结束才让main协程运行结束,那
2021-11-06 18:41:26
1228
原创 对开源软件修改的一些思考和总结
对开源软件修改的一些思考和总结 1.为什么修改? 公司需要开发一款基于web页面的报表应用,但是不能自己从零开发,要基于现有的开源框架进行二次开发或者如果开发框架能满足需求就不再进行二次开发。最后在github上找到一款基于java spring框架的报表软件,但是部分功能不满足目前的需求,需要进行二次开发。 2.如何修改最合适? 虽然进行二次开发,领导要求做到不能影响到后续的开源应用升级。也就是说,我们可以对源码进行二次开发,但是我们开发所做的修改不能影响到后续开源应用升级...
2020-12-05 21:31:01
1526
原创 K8S部署总结以及相关常用命令吐血总结
1.制作镜像 在工程的根目录下,也就是包含有Dockerfile文件的目录下,执行如下命令:docker build -t imageName:tag .2. 打tag:执行命令docker tag imageName:tag domain/project/imageName:tag3.登录镜像库:docker login -p pwd -u username https://domain4.push镜像到仓库:docker push domain/project/.
2020-05-14 19:29:52
270
原创 ThreadPool+CountDownLatch+Callable实现多线程编程
问题背景: 在Java web项目中,Service层的实现类中需要一个方法连续调用多个别的APP的API,且请求结果之间互相不依赖。如果在项目中给每个方法内部都去新建指定数量的线程,则在高并发场景下由于线程创建的过多,会导致系统资源消耗过多,系统运行变慢或者宕机,所以需要使用线程池;每次api请求之后有返回结果,需要拿到返回结果,并感知可能发生的异常,因此要使用Callable接口实现...
2020-05-07 11:41:01
867
原创 MyBatis之Mapper接口的执行过程分析
Mabtis作为一款优秀的持久层框架,不仅提高了我们的开发效率,同时也具备方便快捷的特点。通常我们配置MyBatis的时候都会配置一系列Mappers接口类到MyBatis中,但是如果我们不配置这些Mapper也是可以执行Mapper.xml文件中的SQL语句的,之所以要配置是因为直接使用接口会比不使用接口调用更方便,下面我们先看看不使用接口如何执行SQL。 Map...
2020-02-02 14:18:03
1303
原创 MyBatis 高级映射与懒加载
MyBatis的高级映射是该框架非常重要的一个功能,在开发中有广泛应用,在面试中也是常考的内容,下面我们就学习下高级映射。 引言:MyBatis的的高级映射分为关联和集合两种,关联是一对一关系的映射,集合是一对多关系的映射,都分为嵌套查询和嵌套结果两种实现方式;嵌套查询在数据量不大和关联不多的时候使用比较合适,当数据量大的时候,会出现N + 1问题,导致执行的SQL很多,加载很慢,...
2018-12-17 18:14:31
528
原创 406 Not Acceptable 415 Unsupported Media Type Spring MVC consumes与produces
引言:SpringWeb MVC框架在使用的过程中,有时候会出现请求结果报406 Not Acceptable 或者415 Unsupported Media Type的错误,现在学习下为什么报这个错误以及怎么解决。 Http协议基础知识及概念: HTTP(HyperText Transport Protocol)是超文本传输协议的缩写,是客户端浏览器或其他程...
2018-12-16 17:50:03
1070
1
原创 SpringMVC API缓存 LastModified的实现总结
Servlet的生态中,提供了一种友好机制用来提高系统的响应速度,当客户端查询的数据在没有变化的情况下直接返回,以减少服务器压力和网络传输的压力。Spring MVC也很好的继承了该机制,下面我们就学习下怎么使用LastModified。1.handler是实现了LastModified的Servletpublic class MyServlet extends HttpSe...
2018-12-05 22:52:55
1696
原创 【设计模式】学习之结构型 适配器模式-装饰器模式-代理模式
本篇主要学习适配器模式,装饰器模式,代理模式的使用和结合开源组件源码进行分析,最后对他们作以比较适配器模式 适配器模式,提起适配器我们首先想到的就是春天框架中的RequestMappingHandlerAdapter,那么我们看看它的顶级接口的的HandlerAdapter的注释:其中第一段的注释如下:此接口用于允许{@link DispatcherServlet}无限...
2018-12-04 18:11:48
583
原创 Maven+Eclipse+Tomcat+Spring MVC web 请求 404 问题总结及noHandlerFound
在Eclipse开发环境下基于Maven的Spring 4.3.18.RELEASE 版本开发一个web项目,并使用Tomcat发布,项目正常启动后,遇到一个请求报404,问题分析总结如下:1.contextPath是否正确 因为tomcat默认是以项目包的名字为contextPath的,而maven者是以artifactId为名字打一个war包,因此在默认情况下contex...
2018-12-04 08:09:01
2430
原创 【设计模式】学习之创建型 原型模式
1.Object.clone()方法在学习原型模式以前,我们先学习下Object对象的一个clone()方法,JDK1.8源码如下:/** * Creates and returns a copy of this object. The precise meaning * of "copy" may depend on the class of the object...
2018-11-28 22:56:21
197
原创 【设计模式】学习之创建型 单例模式
提起单例模式,我们一般首先想到的就是Spring 框架中的Bean的作用域singleton,当一个bean的作用域为单例的时候,这个bean在Spring 的容器中只有一个实例化的对象。那么我们如何实现一个单例对象呢?首先,构造函数私有化,这样子就只能在该类中调用new 方法创建该类的对象。其次,变量必须是类变量来接收这个创建的实例对象;最后提供一个公共的静态方法,对外提供获取...
2018-11-27 23:32:29
176
原创 【设计模式】学习之创建型 建造者模式
上一篇 我们学习了工厂模式 ,这一篇我们学习建造者模式,所谓建造者模式就是要我们像现实生活中的建筑建造者一样 一个步骤一个步骤地建造自己的伟大建筑,因为伟大的建筑都是复杂的。当我们要建造一个复杂的对象时,只能是一步一步的进行构造,而不能像平常那样,直接使用一个构造函数进行构造。接下来我们还是结合MyBatis源码学习该模式:1. MappedStatement 该类是MyBatis中...
2018-11-26 11:31:31
222
原创 【设计模式】学习之创建型 工厂模式
工厂模式,在开发中广泛使用的一种用于对象创建的设计模式,尽管有时候我们可能并不知道自己使用的就是工厂模式或者看到的开源软件源码中用到的就是工厂模式。开源软件中的MyBatis中的SqlSession的创建就是使用了工厂模式,分析如下:接口 SqlSessionFactory /** * Creates an {@link SqlSession} out of a con...
2018-11-25 10:59:05
140
原创 CacheException: Error serializing object. Cause: java.io.NotSerializableException
错误堆栈信息如下: at org.apache.ibatis.cache.decorators.SerializedCache.serialize(SerializedCache.java:102) at org.apache.ibatis.cache.decorators.SerializedCache.putObject(SerializedCache.java:56) at org...
2018-11-24 17:40:04
4026
原创 MyBatis 本地缓存和二级缓存使用以及源码分析 第二篇
本篇分析缓存的查询流程1.二级缓存的全局配置 配置中的设置配置cacheEnabled标签可以全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存,默认是真,也就是默认开启,这个配置就是二级缓存的全局开关。2.缓存接口 在MyBatis的的包org.apache.ibatis.cach...
2018-11-23 18:01:58
1057
2
原创 MyBatis 本地缓存和二级缓存使用以及源码分析 第一篇
本地缓存 也称为一级缓存,分为两个作用域SESSION和STATEMENT。官网中的描述:MyBatis利用本地缓存机制(Local Cache)防止循环引用(循环引用)和加速重复嵌套查询。默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为声明,本地会话仅用于语句执行上,对相同的一个SqlSession的不同调用将不会共享数据。也就是说本地缓存我们不需要配置就是生...
2018-11-20 11:19:54
1168
原创 【设计模式】学习之开篇 设计模式浅谈与设计模式六大原则
设计模式,Design Pattern 代表了构造某一事物的最佳实践。软件设计模式通常被有经验的面向对象的软件开发人员所采用,因为他们一些场景问题的最佳解决方案,这些解决方案是众多开发人员,设计人员在相当长的一段时间内从错误和经验中总结而来的。在我们阅读一些开源框架的时候,总会感觉有一些困惑,其中一部分原因就是我们不理解这其中涉及的设计模式。尤其像Spring,MyBatis等较为著名的开源软件更...
2018-11-17 18:19:29
155
原创 Spring MVC @RequestMapping @ResponseBody @RequestBody @PathVariable @RestController ...总结
Spring MVC框架是目前使用最广泛的Web框架,在该框架种涉及到一些常用的重要注解,现总结如下:@RequestMapping 作用:请求映射,也就是将请求的URI映射到特定的Hander类或者方法上。官方解释如下:在该注解下还支持一些相关的注解和参数,当然你可以根据你的需求进行配置。1.path配置@RequestMapping(“/ foo”)等价于@Reque...
2018-11-16 18:10:04
344
原创 记一次数据库事务问题的定位与解决
技术背景:SpringBoot用SpringMVC + + +的MyBatis的ActiveMQ问题描述:在服务层中根据主键对某表中数据记录的部分字段进行更新,更新之后使用ActiveMQ的对刚才更新数据的中另外一个字段进行更新,消息队列的更新是后加的,加上之后导致先前的更新失效; 问题分析:经过日志分析,消息队列触发的更新总是拿到服务层中第一次更新前的数据进行更新,所以会将第一次更新...
2018-11-15 18:15:30
294
1
原创 Result Maps collection already contains value for com.*.*.*Mapper.BaseResultMap
问题:在使用MyBatis的过程中,启动项目总是报错误,如下Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains valu...
2018-11-14 18:44:17
1333
原创 413 Request Entity Too Large&The field uploadFiles exceeds its maximum permitted size of 1048576 byt
问题场景:使用nginx做代理转发一个tomcat发布的springBoot web应用,上传图片时在service层做了图片大小2M的校验,但是上传图片时出现以上两个错误。问题1:nginx 413 Request Entity Too Large 问题分析:从错误信息判断是当前上传的图片超过了nginx的请求体设置的最大值,查看nginx文档,在核心模块中有关于请求体设置的说明,htt...
2018-11-14 18:35:17
661
原创 MyBatis 排序防止sql注入
MyBatis的排序引言 最近在项目开发中遇到一个问题,项目中使用的的MyBatis的排序功能被安全部门扫描出了SQL注入安全隐患,查看安全报告说是有一个接口中存在SQL注入的安全漏洞,检查后发现是因为该接口中的排序功能使用了的MyBatis中的$ {}。#{}与$ {}的区别 默认情况下,使用#{}格式的语法会导致MyBatis的创建的PreparedStatemen...
2018-11-13 07:23:59
18429
8
原创 Maven pom.xml 报错 Cannot create resource output directory
maven 执行clean package 命令时报错:Cannot create resource output directory: D:\test\****\target\classes后来去文件夹下试着手动删除,确实是提示删除不了需要管理员权限,因此有很多程序员就去以管理员权限删除了。其实这是不对的做法。因为clean命令会先删除target下已经存在的文件,删除后会重新创建编译的文件...
2018-08-16 09:24:59
19332
10
原创 多线程之线程安全关键字synchronized
synchronized关键字,是多线程编程时保证线程安全使用非常广泛的java知识。下面我们学习下synchronized的相关知识:实现原理 synchronized的实现原理是基于内存中的lock原则。内存模型中的变量读写有八个步骤也有八个原则,synchronized的实现是基于八个原则中的lock原则。将其实现在指令级别就是monitorenter和monitore...
2018-08-03 11:08:27
3684
原创 线程的创建与线程池ThreadPoolExecutor,Executors
线程的创建与线程池及线程池工具类1.线程的创建方式1.1继承Thread类重写run方法public class Test { public static void main(String[] args) { Thread thread = new MyThread(); thread.setName("mythread001"); ...
2018-07-31 17:42:25
20132
2
原创 数据库事务的特性与事务隔离级别
数据库事务的特性与隔离级别事务 事务简单的理解就是要在数据库上执行的一组业务相关的SQL语句,是关系型数据库的最基础执行单位;但不是每个数据库的每个引擎都支持事务,例如我们使用的MySQL数据库的MyISAM就不支持事务。ACID-数据库事务的四大特性 A-Atomicity(原子性) 指数据库事务的操...
2018-07-27 16:57:43
225
原创 java 集合源码分析之ArrayList
ArrayList源码分析1.简述 ArrayList也就是List接口的可变长度数组的实现(Resizable-array implementation of the List interface),可以大体上认为是Vector的非线程安全实现。2.源码分析 2.1初始化 构造函数三个: ...
2018-07-24 21:39:15
367
原创 JVM学习之八 垃圾收集器
垃圾收集器 前面我们学习了关于垃圾收集的算法和为了确保垃圾收集的准确性系统提供的一些机制的概念,现在我们开始学习收集器,这个与我们开发最贴近的知识。由于JVM有各种各样的,而且java规范中对一些实现没有做强制的约束,所以不同的虚拟机实现会有不同,因此,我们以最广泛应用的HotSpot虚拟机中的收集器为学习目标进行学习。虽然现在JDK9已经早都发布,但是目前学习的书中使用的是JDK1.7中的...
2018-07-08 22:22:31
135
原创 放弃国企不错前途转行IT - 三年程序人生之再回首
程序人生 情不知所起,一往而深 初中是学过basic,虽然没做出什么东西,但是觉得特别有意思。高中的时候在读物上了解到奥巴马的同班同学李开复转行学计算机,并成为中国人在美国计算机行业做的最优秀的人,也是这个人唯一一个敢说自己觉得自己成功的人。也许从那时起就埋下了这种子,只是在慢慢的成长却是悄无声息。 念念不忘,却渐行渐远 也许不是每个人都有一段迷茫的路,但是也有一些人有过...
2018-07-04 00:36:22
3434
原创 JVM学习之七 HotSpot收集算法如何实现精确收集
HotSpot收集算法如何实现精确收集枚举根节点 当我们要回收内存的时候,我们需要对对象进行可达性分析,也就是从根节点搜索引用。假如引用关系在变化那么我们的分析结果就会不准确,因此我们需要在此时暂停掉所有正在执行的java线程,以确保引用关系不变化,Sun公司(当然已经被Oracle收购了)将其称为Stop The World。 当Stop The World 时,我们并不需要一...
2018-07-03 23:44:58
172
原创 JVM学习之六 垃圾收集算法
垃圾收集算法 因为JVM的内存分为不同的区域,作用也不相同,存储的元素生存周期也不同,这就决定了垃圾收集算法有着不相同的多种算法。当然,任何算法的演进都是有其历史的,现在我们看看垃圾收集算法的演进。标记-清除算法 标记清除(Mark-Sweep)算法是最基础的算法,其他算法是对该算法的改进。标记清除算法分为两个阶段,分别是标记阶段和清除阶段。 标记阶段就是之前博客(四种引...
2018-06-30 21:50:40
129
原创 Eclipse 配置web工程的build
最近在部署web项目得时候,不知道怎么搞了下,发现项目部署总是失败,找不到class文件,web.xml的位置也总是不对。然后研究了几个小时查了些资料才搞定,现在记录下来共享给大家。 1.tomcat部署servlet的包结构 tomcat是servlet的容器,它为servlet提供了通信的能力,servlet是tomcat容器的组件,实现了具体的web功能。那么要在tomc...
2018-06-28 11:50:26
7721
原创 JVM学习之五 回收方法区
回收方法区回收的必要性 Java 虚拟机规范中,可以不实现垃圾回收。方法区(HotSpot虚拟机中的永久代)进行垃圾回收时相对于堆中垃圾收回而言,“性价比”比较低。回收的对象 方法区中存储的是加载的类的信息,常量,静态变量,即时编译后的代码等数据,以回收的对象也就是这些内容。在判断非类信息是否可用的时候,也是采用可达性分析,比如常量池中的 何种场景需要回收 既然回收方法区不...
2018-06-26 21:59:55
404
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人