
Java基础篇
文章平均质量分 94
捡田螺的小男孩
一个喜欢弹吉他的Java程序员
展开
-
使用线程池的10个坑
大家好,我是捡田螺的小男孩。日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。今天田螺哥跟大家聊聊线程池的10个坑。大家看完肯定会有帮助的~线程池默认使用无界队列,任务过多导致OOM线程创建过多,导致OOM共享线程池,次要逻辑拖垮主要逻辑线程池拒绝策略的坑Spring内部线程池的坑使用线程池时,没有自定义命名线程池参数设置不合理线程池异常处理的坑使用完线程池忘记关闭。...原创 2022-08-16 08:36:33 · 6436 阅读 · 2 评论 -
聊聊工作中使用了哪些设计模式
前言大家好,我是捡田螺的小男孩。平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式。工作中常用到哪些设计模式1.策略模式1.1 业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码:if(type=="A"){//按照A格式解析}elseif(...原创 2021-10-27 22:28:49 · 709 阅读 · 0 评论 -
日志打印的15个好建议
前言大家好,我是捡田螺的小男孩(公众号)。日志是快速定位问题的好帮手,是撕逼和甩锅的利器!打印好日志非常重要。今天我们来聊聊日志打印的15个好建议~1. 选择恰当的日志级别常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~ error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的; warn:警告日志,一般的错误,对业务影响不大,但是需要开发关注;原创 2021-09-22 22:31:33 · 1438 阅读 · 6 评论 -
25种代码坏味道总结+优化示例
前言什么样的代码是好代码呢?好的代码应该命名规范、可读性强、扩展性强、健壮性…而不好的代码又有哪些典型特征呢?这25种代码坏味道大家要注意啦公众号:捡田螺的小男孩github地址1. Duplicated Code (重复代码)重复代码就是不同地点,有着相同的程序结构。一般是因为需求迭代比较快,开发小伙伴担心影响已有功能,就复制粘贴造成的。重复代码很难维护的,如果你要修改其中一段的代码逻辑,就需要修改多次,很可能出现遗漏的情况。如何优化重复代码呢?分三种情况讨论:同一个类的两个函数含有相原创 2021-05-16 19:19:45 · 4422 阅读 · 0 评论 -
一次代码优化的实践(模板方法+策略+工厂方法模式)
前言好久没分享工作总结啦,今天来一份代码优化总结。用模板方法+策略+工厂方法模式优化了代码,耐心点看完,应该对大家有帮助的~本文已经收录到githubhttps://github.com/whx123/JavaHome公众号:捡田螺的小男孩优化代码前先来了解一下类似的业务场景,简言之,就是:多个商户接入我们系统,都是走一个类似的流程通过http请求出去的。优化前,每个公司对应一个句柄服务,伪代码如下:// 商户A处理句柄CompanyAHandler implements Reque原创 2020-09-23 07:20:39 · 471 阅读 · 0 评论 -
Java程序员必备基础:JDK 5-15都有哪些经典新特性
前言JDK 15发布啦~ 我们一起回顾JDK 5-15 的新特性吧,大家一起学习哈~本文已经收录到githubhttps://github.com/whx123/JavaHome公众号:捡田螺的小男孩Java 5 新特性1. 泛型泛型本质是参数化类型,解决不确定具体对象类型的问题。 List<String> strList=new ArrayList<String>();2. 增强循环(for-each)for-each循环简化了集合的遍历。String原创 2020-09-19 09:02:39 · 3514 阅读 · 8 评论 -
个人珍藏的80道多线程并发面试题(11-20答案解析)
前言个人珍藏的80道Java多线程/并发经典面试题,现在给出11-20的答案解析哈,并且上传github哈~https://github.com/whx123/JavaHome个人珍藏的80道多线程并发面试题(1-10答案解析)11、为什么要用线程池?Java的线程池内部机制,参数作用,几种工作阻塞队列,线程池类型以及使用场景回答这些点:为什么要用线程池?Java的线程池原理线程池核心参数几种工作阻塞队列线程池使用不当的问题线程池类型以及使用场景为什么要用线程池?线程池:一原创 2020-08-23 10:26:02 · 1118 阅读 · 1 评论 -
Java程序员面试必备:Volatile全方位解析
前言volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~1.volatile的用法2.vlatile变量的作用3.现代计算机的内存模型(计算机模型,总线,MESI协议,嗅探技术)4.Java内存模型(JMM)5.并发编程的3个特性(原子性、可见性、有序性、happen-before、as-if-serial、指令重排)6.volatile的底层原理(如何保证可见性,如何保证指令重排,内原创 2020-08-11 07:27:41 · 1307 阅读 · 1 评论 -
个人珍藏的80道多线程并发面试题(1-10答案解析)
前言个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善,并且上传github哈~https://github.com/whx123/JavaHome❞「公众号:捡田螺的小男孩」1. synchronized的实现原理以及锁优化?synchronized的实现原理synchronized作用于「方法」或者「代码块」,保证被修饰的代码在同一时间只能被一个线程访问。synchronized修饰代码块时,JVM采用「monitorenter原创 2020-07-28 22:46:20 · 740 阅读 · 0 评论 -
程序员必备基础:Git 命令全方位学习
前言掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~https://github.com/whx123/JavaHome公众号:捡田螺的小男孩文章目录Git是什么?Git的相关理论基础日常开发中,Git的基本常用命令Git进阶之分支处理Git进阶之处理冲突Git进阶之撤销与回退Git进阶之标签tagGit其他一些经典命令Git是什么在回忆Gi原创 2020-06-27 17:33:01 · 29978 阅读 · 26 评论 -
Java 异常处理的十个建议
前言Java异常处理的十个建议,希望对大家有帮助~本文已上传github:https://github.com/whx123/JavaHome公众号:捡田螺的小男孩一、尽量不要使用e.printStackTrace(),而是使用log打印。反例:try{ // do what you want }catch(Exception e){ e.printStackTrace();}正例:try{ // do what you want }catch(Exceptio原创 2020-06-14 16:03:14 · 1189 阅读 · 0 评论 -
Java程序员必备基础结构图
前言最近看了深入理解Java虚拟机第三版,整理了一些基础结构图,算是比较全的了,做一下笔记,大家一起学习。1.Java虚拟机运行时数据区图JVM内存结构是Java程序员必须掌握的基础。程序计数器程序计数器,可以看作当前线程所执行的字节码的行号指示器它是线程私有的。Java虚拟机栈线程私有的,生命周期与线程相同。每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(...原创 2020-05-02 21:19:49 · 1743 阅读 · 0 评论 -
Java程序员必备:序列化全方位解析
前言相信大家日常开发中,经常看到Java对象“implements Serializable”。那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~什么是Java序列化?为什么需要序列化?序列化用途Java序列化常用API序列化的使用序列化底层日常开发序列化的注意点序列化常见面试题一、什么是Java序列化?序列化:把Java对象转换为字节序列的过程反序列...原创 2020-04-20 07:36:30 · 1249 阅读 · 0 评论 -
优化if-else代码的八种方案
前言代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。优化方案一:提前return,去除不必要的e...原创 2020-03-07 16:13:03 · 1187 阅读 · 0 评论 -
常见Java面试题解析(基础篇,附答案)
前言金三银四马上要来了,整理了Java一些经典面试题,也给出了答案,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,非常感谢。HashMap,HashTable,ConcurrentHash的共同点和区别思路:可以从它们的底层结构、是否允许存储null,是否线性安全等几个维度进行描述,最后可以向面试官描述一下HashMap的死循环问题,以及ConcurrentHashMap为啥放弃分段锁...原创 2020-02-01 11:14:48 · 9179 阅读 · 8 评论 -
Java程序员必备基础:泛型解析
前言整理一下Java泛型的相关知识,算是比较基础的,希望大家一起学习进步。一、什么是Java泛型Java 泛型(generics)是 JDK 5 中引入的一个新特性,其本质是参数化类型,解决不确定具体对象类型的问题。其所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型类泛型类(g...原创 2020-01-19 00:17:33 · 1088 阅读 · 0 评论 -
Java程序员必备基础:内部类解析
前言整理了一下内部类的相关知识,算是比较全,比较基础的,希望大家一起学习进步。一、什么是内部类?在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性 定义方式一致。一个内部类的例子:public class Outer { private int radius = 1; public static int co...原创 2020-01-11 07:38:40 · 14194 阅读 · 3 评论