2月工作总结

2022/2/14

Question-idea :项目一直build,build时间太长?
1、target文件太大,删除target文件,或者在idea的maven控件中clean一下。
2、file->project structure->modules,勾选上 Exclude output paths (排除输出路径,选中此复选框可以排除输出目录)。
3、(这个问题一般都是这个原因)file->Settings->Build,Execution,Deployment->Compiler
a)勾选Build project automatically
b)把build process heap size调大(2048M、4096M)
4、终极办法:
a)

图片1.png

b)
图片2.png

c)
图片3.png

d)
图片4.png

e)选择编译启动(你看下是用idea自带的maven compiler,还是项目中下载的maven compiler,哪个能成功启动就用哪个)。

Knowledge-idea : JSP热加载
1、

图片5.png

2、
图片6.png

3、
图片7.png

4、
图片8.png

)

2022/2/15

Knowledge-MySQL :根据两个表对应的字段批量修改数据(用SQL语句实现)
1、 UPDATE `test` a JOIN ( SELECT 1 AS id, 11 AS code, 'holy' AS name UNION SELECT 2 AS id, 22 AS code, 'shit' AS name ) b USING(id, code)SET a.name=b.name;
2、 把id=1且code=11的name更新为’holy’,把id=2且code=22的name更新为’shit’。注意,条件字段必须放在USING中。

2022/2/16

Question-Spring :restTemplate请求接口,传入的参数变成空的
RestTemplate post请求主要通过三种方式实现。
1、 调用postForObject方法。
2、 使用postForEntity方法。
3、 调用exchange方法。
postForObject和postForEntity的主要区别在于,postForEntity方法可以设置header属性,当要设置header属性时使用postForEntity方法。exchange方法和postForEntity类似,但是更加灵活,它还可以调用get、put、delete请求。使用这三种方法调用post请求传递参数时,如果接口是以表单接收参数,参数map不可以定义为HashMap、LinkedHashMap这两种类型(除url使用占位符传递参数),应当使用MultiValueMap。因为HashMap是以请求体传递,MultiValueMap是以表单传递。

Knowledge-Java :在JSP页面传递并显示名称 – XXX&XXX
因为&在请求URL时是用来拼接参数的,所以在传递这种带有特殊符号的参数时,可以把它以UTF-8格式编码得到编码表对应的字符,在显示时以相同的编码格式解码回来,就可以正常展示了。

2022/2/17

Knowledge-Java :提高Java效率的35个小技巧
1、 尽量指定类、方法的final修饰符
2、 尽量重用对象
3、 尽可能使用局部变量
4、 及时关闭流
5、 尽量减少对变量的重复计算
6、 尽量采用懒加载策略,即需要时才加载创建
7、 慎用异常
8、 不要再循环中try…catch…,应该放再最外层
9、 底层数据结构为数组的集合、工具类最好指定初始长度
10、当复制大量数据时,使用System.arraycopy()方法
11、乘法和除法使用位运算符
12、循环内不要不断创建对象引用
13、能用数组尽量用数组,不能确定大小时使用arrayList
14、尽量使用非线程安全的类,如HashMap、ArrayList、StringBuilder,除非线程安全需要
15、不要将数组声明成为public static final
16、尽量再适合的场景使用单例模式
17、尽量避免使用静态变量
18、及时清除不需要的会话
19、实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环来遍历
20、使用同步代码块替代同步方法
21、将常量声明为static final,并以大写命名
22、不要创建一些不使用的对象,不要导入一些不使用的类
23、程序运行过程中避免使用反射
24、使用数据库连接池和线程池
25、使用带缓冲的输入输出流进行IO操作
26、顺序插入和随机访问的场景比较多时使用ArrayList,元素删除和中间插入比较多时使用LinkedList。
27、不要让public方法中有太多形参
28、字符串变量和字符串常量equals的时候将字符串常量写在前面
29、if (i == 1)和if (1 == i)在Java中没有区别,从习惯上建议使用前者
30、不要对数组使用toString()方法
31、不要对超出范围的基本数据类型做向下强制转型
32、公用的集合类中不使用的数据及时remove掉
33、把一个基本数据类型转为字符串,toString()最快,其次是String.valueOf()、数据+最慢
34、使用iterator循环遍历map是最有效率的
35、对资源的close建议分开操作

2022/2/18

Knowledge-Java :单例模式所有写法
1、 懒汉模式(线程不安全)
2、 Synchronized修饰的懒汉模式(线程安全)
3、 Double-check+synchronized的懒汉模式(通常线程安全,低概率不安全)
4、 Volatile+double-check+synchronized的懒汉模式(线程安全)
5、 饿汉模式(线程安全)
6、 静态内部类模式(线程安全)
7、 枚举类模式(线程安全,防止反射攻击)
8、 结合ThreadLocal实现单例模式(线程安全)
9、 使用CAS锁实现单例(线程安全)

2022/2/21

Knowledge-MySQL :BLOB类型的字段
数据以二进制的方式存储进数据库,具体的Java类型为byte[],代码为
stringVar.getBytes(“UTF-8”),取出来的代码为new String(byte[], “UTF-8”)。
在navicat中点击类型为BLOB的列,再点击文本,如果乱码的话,
SELECT CAST(columnName as char)直接查询。

2022/2/22

Knowledge-Java :ThreadLocal
1、 ThreadLocal是什么 :从字面意思来看的话是本地线程,其实它是本地线程变量,以
ThreadLocalVariable命名会更贴切一点。它根据它自己和当前线程提供了区分每个线程的变量副本,这个变量副本可以在当前线程生命周期内的所有地方使用。
2、 ThreadLocal与线程同步机制的比较 :在技术上我认为它们两个是不同的,是无法比较的,线程同步解决了多个线程访问同一资源的线程安全问题。而ThreadLocal是为每个线程提供了一个变量副本,所以无从谈起线程安全问题。在思想上它们是相反的关系,线程同步是以“时间换空间”的想法进行设计的,而ThreadLocal是典型的以“空间换时间”的做法。
3、 ThreadLocal的内存泄露 :什么是内存泄漏:有个变量它占了一块内存,但你找不到它了,但是又不能GC回收。当这样的东西越来越多,内存吃紧,最后宕机。博客里面讲了一个蛮有意思的小故事说:在抗日时期,有两名地下党A和B,A是上线,B是下线。B不能直接联系党中央,需要通过A来传话,当A发生意外暴露,被处决掉了。党中央就联系不到B了,不能给他分配任务,但B是存在的,只是联系不到他。这种情况就类似与内存泄漏。从代码上分析,在ThreadLocal变量调用set方法存储值时,方法里面首先通过本地方法获取当前线程对象,再通过线程对象获取它的属性threadLocals(这个属性的类型可以理解为一个map),再把this(也就是本变量threadLocal)作为key,存储的值作为value存储进这个threadLocals里面去。那么发生内存泄漏就是this被GC回收掉了,那么key为null,value还在,而且这个value也找不到了,也无法被清理回收。因为这个threadLocals的key是被WeakReference(弱引用:无论当前内存是否充足,都只能活到下次垃圾回收之前)修饰的,所以key只能活到下次垃圾回收之前。这里就产生两个问题,1、怎么解决?2、为啥要把key修饰成弱引用?1 :可以把ThreadLocal变量修饰成static的,让它随着类的加载而加载,随着类的结束而结束,就不会随时被GC回收了。2 :博客中说ThreadLocal有两个维度,线程和变量。不一定要从线程角度去理解ThreadLocal,我们可以从变量角度去理解它。在Java中,变量用完就应该被JVM回收,这是Java的特点和优势。ThreadLocal既然用完了就应该被JVM回收,但是它与value绑定在一起,而且只能通过threadLocal找到value,那么最后写这个源码的人,耍了个小聪明,用弱引用包装了threadLocal,没有直接回收,而是拖拖拉拉的回收,最后也实现了变量不使用就回收的基本原则,与Java思想一脉相承。这里有个问题就是回收的时机,如果ThreadLcoal作为局部变量,那么在方法出栈时,这个局部变量就要被回收,但此线程可能还没结束,所以就访问不到value了,有个解决办法就是及时的remove掉,也可以解决内存泄漏。如果ThreaLocal作为类的全局变量也就是属性,它的回收机制只能活到下次GC之前(-question-这里要搞情楚JVM垃圾回收的策略和机制,我不清楚它有没有可能刚赋值就被GC)。

2022/2/23

Knowledge – Java :map+Function替代if-else

public class QueryGrantTypeService{
    @Autowired
    private GrantTypeService grantTypeService;
    private Map<String,Function<String,String>> grantTypeMap = new HashMap();

    @PostConstruct
    public void dispatcherInit(){
        grantTypeMap.put(“红包”, resourceId->grantTypeService.redPaper(resourceId));
        grantTypeMap.put(“购物券”, resourceId->grantTypeService.shopping(resourceId));
        grantTypeMap.put(“qq会员”, resourceId->grantTypeService.QQVip(resourceId));
    }

    public String getResult(String resourceType,String resourceId) {
      Function<String,String> result = grantTypeMap.get(resourceType);
      If (result != null) {
        return result.apply(resourceId);
      }
      return “查询不到该优惠券的发放方式”;
    }
}

2022/2/24

Wisdom :年轻时候的毛泽东,从来不焦虑
1、 日日行,不怕千万里;常常做,不怕千万事。
2、 在危险环境中表示绝望的人,在黑暗中看不见光明的人,只是懦夫与机会主义者。
3、 怎么样才能去努力学习和实践这样的思维方式,去努力改变自己面对困难时的心态,并最终改变自己未来的境遇。
a) 抱着直面问题的心态去寻求解决之道
b) 在对规律的把握中练就一套万能法则
i. 情况是逐渐了解的,需要继续不断的努力。认识世界,不是一件容易的事。
c) 在现实的摸爬滚打中不断精进
i. 树立了远大的志向。我们的任务就是过河,但是没有桥或没有船就不能过。不解决桥或船的问题,过河就是一句空话。
ii. 讲是讲,做是做,做起来并不容易。
iii. 世界上没有完全笔直的道路,要准备走曲折的路。
iv. 选择重要,还是努力重要?往往有这种情况,有利的情况和主动的恢复,产生于“再坚持一下”的努力之中。(根据规律把握住坚持一个事情的度)
4、 最后总结,日日行,不怕千万里;常常做,不怕千万事。

2022/2/25

Knowledge – Java :java.util.cucurrent.CountDownLatch
1、 JDK1.5引入的类,我的理解它的作用就是线程执行计数器,实现了等待启动的每个线程执行完毕,再执行主线程的功能。用法:在多线程情况下,实例化它(初始化线程数),并在线程的run方法中业务代码之后调用它的countDown()方法,实现线程数减1,最后调用await()方法等待每个线程执行完毕,然后继续执行主线程。

代码整洁之道

1、整洁的代码
a) 减少重复代码 :如果有两处相同的逻辑代码,尽量写到一个方法里面去
b) 提高表达力 :表达力包括命名、包括逻辑、包括整洁清晰度
c) 提早构建简单抽象 :抽象利于扩展
2、有意义的命名
a) 名副其实 :不要在编写代码中出现魔法值
b) 避免误导 :不要使用外形相似的命名
c) 做有意义的区分 :不要使用废话,例如variable一词就永远不应当出现在变量名中(这就是ThreadLocal为啥是ThreadLocal而不是ThreadLocalVariable)。Table一词永远不要出现在表名中。NameString、moneyAmount等等。
d) 命名表示意图 :不要有魔法值
e) 类名应该是名词,方法名应该是动词。
f) 别用双关语 :一般不用add,用insert。
g) 添加有意义的语境 :尽量把一个动作写成一个方法,简洁代码,结构清晰。

最后2月份总结:
1、 确定了今年的关键字:稳定、学习、改变
2、 工作上:完成了每日总结,good,继续加油,完成。
3、 学习上:代码整洁之道一书,17章,完成2章,难受,没完成。
4、 身材上:计划跑步50公里,完成27.58公里,没完成。

[图片上传中...(微信图片_20220226181200.jpg-dc4e80-1645870368336-0)]
微信图片_20220226181156.jpg
微信图片_20220226181149.jpg
微信图片_20220226181153.jpg
微信图片_20220226181200.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容