Java知识
文章平均质量分 59
java知识和问题解决
后端小王
生命不止代码不朽
展开
-
工作四年,分享50个让你代码更好的小建议
1. 仅是判断是否存在时,select count 比 select 具体的列,更好。我们经常遇到类似的业务场景,如,判断某个用户userId是否是会员。(反例): 一些小伙伴会这样实现,先查从用户信息表查出用户记录,然后再去判断是否是会员:<select id="selectUserByUserId" resultMap="BaseResultMap"> selct user_id , vip_flag from user_info where user_id =#{转载 2021-03-30 10:21:52 · 205 阅读 · 0 评论 -
Java日常开发的21个坑,你踩过几个?
转载自博客:https://juejin.cn/post/6910831193931923463前言最近看了极客时间的《Java业务开发常见错误100例》,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~github地址,感谢每颗stargithub.com/whx123/Java…公众号:捡田螺的小男孩1. 六类典型空指针问题包装类型的空指针问题 级联调用的空指针问题 Equals方法左边的空指针问题 ConcurrentHashMap 类似容器不支持转载 2020-12-28 11:30:03 · 387 阅读 · 0 评论 -
Java获取天气情况
背景:项目中有个需求是根据行政区划编码获取当天天气情况,于是开始在网上找各种API,但是经过测试发现不是接口返回值乱码就是接口经常挂掉,后来经过多方搜索发现高德开放平台的天气查询接口很好用,地址:https://lbs.amap.com/api/webservice/guide/api/weatherinfo一、注册登录高德开放平台账户创建好应用后,点击添加按钮,为应用添加一个key值,名字随便起到这步,key值就申请好了二、根据API编写调用代码impo.原创 2020-12-24 11:05:41 · 1541 阅读 · 1 评论 -
java中List的深拷贝
1.利用CollectionUtils的mergeArrayIntoCollection和Collections.copy结合实现深拷贝public class TechSysVo { @Getter @Setter private Long id; @Getter @Setter private String name; public TechSysVo() { }}import com.wsh.原创 2020-12-09 17:23:52 · 8126 阅读 · 9 评论 -
代码优化大盘点:35 个 Java 代码优化魔鬼细节
转载自掘金:https://juejin.cn/post/6903792484204331021前言代码 优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优转载 2020-12-09 14:26:12 · 281 阅读 · 0 评论 -
Java中数组的深拷贝和浅拷贝
一、数组浅拷贝的4种方式1. 使用 copyOf() 方法对数组进行复制jdk1.8的API文档中关于Arrays的copyOf方法: static boolean[] copyOf(boolean[]original, intnewLength) 使用 false (如有必要)复制指定的数组,截断或填充,以使副本具有指定的长度。 static byte[] copyOf(byte[]original, intnewLength)...原创 2020-12-09 12:11:42 · 1484 阅读 · 0 评论 -
Java 浅拷贝和深拷贝
一、拷贝分类根据对对象属性的拷贝程度(基本数据类和引用类型),会分为两种:浅拷贝 (Shallow Copy) 深拷贝 (Deep Copy)1. 浅拷贝介绍浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。原创 2020-12-09 10:54:50 · 172 阅读 · 0 评论 -
《面试官,ThreadLocal 你要这么问,我就挂了!》
转载自小傅哥得虫洞栈:https://bugstack.cn/一、前言说到底,你真的会造火箭吗?常说面试造火箭,入职拧螺丝。但你真的有造火箭的本事吗,大部分都是不敢承认自己的知识盲区和技术瓶颈以及经验不足的自嘲。面试时:我希望你懂数据结构,因为这样的你在使用HashMap、ArrayList、LinkedList,更加得心应手。 我希望你懂散列算法,因为这样的你在设计路由时,会有很多选择;除法散列法、平方散列法、斐波那契(Fibonacci)散列法等。 我希望你懂开源代码,因为这样的转载 2020-12-01 15:12:21 · 254 阅读 · 0 评论 -
写代码有这16个好习惯,可以减少80%非业务的bug
转载自掘金:https://juejin.cn/post/6899077803665260557前言每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~github地址,感谢每颗stargithub.com/whx123/Java…公众号:捡田螺的小男孩1. 修改完代码,记得自测一下改完代码,自测一下 是每位程序员必备的基本素养。尤其不要抱有这种侥幸心理:我只是改了一个变量或者转载 2020-12-01 14:51:37 · 183 阅读 · 0 评论 -
讲点码德!避免这些代码坏味道,努力做一名优秀的程序员
转载自掘金:https://juejin.cn/post/6900924429435502605大家闭着眼睛想一下什么是好代码?也许你的脑海中漂浮着一堆词:干净、整洁、命名规范、注释合理、高内聚低耦合……人人都想写好代码,因为看好代码就如同看一位五官端正的女子,心情愉悦、舒畅,而看糟糕的代码就如同看见腐烂的食物,闻起来也有一股坏味道。大多数人写的代码都不能称之为好代码,一方面由于自己技能限制,另一方面也可能根本就分不清好代码和坏代码,下面笔者结合日常编码实践与大家分享一下常见的代码坏味道。坏转载 2020-12-01 14:41:53 · 794 阅读 · 0 评论 -
太赞了,GitHub 上标星 115k+ 的 Java 教程!
转载自掘金:https://juejin.cn/post/6901093839051128839额,大家好啊,我是浑元形意门的学员小二哥(忍住别笑)。就在五个半小时前,有个小伙伴私信我说,“哥,能推荐一些高质量的 Java 教程吗?”我回他,“我写的教妹学 Java 不香吗?通俗易懂,风趣幽默,学起来多带劲......”没等我说完,他“啪”的一下就回过来了新的信息,很快啊。“哥,你那教程才更新到第 17 讲,我前后看了不下 5 遍了,确实学到了很多。但我还想更进一步啊,赶紧点,有没有其他的教程,转载 2020-12-01 14:34:57 · 238 阅读 · 0 评论 -
Java数组
专题一 Java基础1.4 数组1.4.1数组的定义和访问概念:数组就是存储数据 长度固定 的容器,保证多个数据的数据类型要一致数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99。本教程将为大家介绍 Java 数组的声明、创建和初始化,原创 2020-11-16 16:42:45 · 165 阅读 · 0 评论 -
Java中的随机数生成方法
第一种: 使用 Math中的random()方法,生成[0, 1.0)的double类型数据 想要得到某个范围内的随机数: (数据类型)(最小值+Math.random()*(最大值-最小值+1))例: 得到1到100的随机数(int)(1+Math.random()*(100-1+1)) 第二种:使用java.util.Random类实现 Random构造方法://两种构造方法:Random r = new Random();//不包含随机种子Random...原创 2020-11-16 15:38:03 · 812 阅读 · 0 评论 -
Java流程控制
break;原创 2020-11-16 15:09:32 · 386 阅读 · 0 评论 -
Java中的数据类型和运算符
专题一 Java基础1.2 数据类型和运算符1.2.1 变量、标识符和关键字1.变量:在程序执行过程中,其值能被改变的量称为变量。定义变量(作用):定义变量就是告诉编译器这个变量的数据类型,这样编译器才知道需要配置多少空间给它。以及它可以存放什么样的数据,在程序运行过程中,空间内的值是变化的,这个内存空间就称为变量,为了便于操作,给这个空间取个名字称为变量名。定义变量的规则:变量必须是一个有效的标识符;变量名不可以使用Java中的关键字;变量名不能重复,选择有意义的单词作为变量.原创 2020-11-16 11:35:14 · 467 阅读 · 0 评论 -
初识Java
专题一 Java基础1.1初识Java1.1.1Java语言概述Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java语言迅速崛起(Java applet 可以在浏览器中运行),成为大型互联网项目的首选语言。2009年04月20日,美国甲骨文公司74亿美元收购Sun,取得java的版权。Java 是面向对象的语言,没有面向对象编程经验的读者需要原创 2020-12-01 09:57:00 · 308 阅读 · 2 评论 -
Java中接口与抽象类的区别
一、相同点:1.都是抽象类型2.都可以有实现方法(JDK8之前不允许)3.都可以不需要实现类或者继承者去实现所有方法(JDK8之前不行,之后接口中的默认方法不需要实现者实现)二、不同点1.抽象类不可以多重继承,接口可以(无论是多重类型继承还是多重行为继承)2.抽象类和接口反映出的设计理念不同。抽象类反映的是“is-a”关系,接口标示的是“like-a”关系3.接口中定义的变量默认是public static final 类型,且必须给其初值,所以实现类中不能重新定义,也不能改变其原创 2020-11-12 13:57:19 · 140 阅读 · 0 评论 -
Java的Hutool 工具类
转载自:https://juejin.im/post/6886594116500029448群里还有一部分小伙伴表示还不知道这个开源类库,第一次听说。所以我决定写一篇文章普及下,毕竟好的轮子值得推荐啊。Hutool 的作者在官网上说,Hutool 是 Hu+tool 的自造词(好像不用说,我们也能猜得到),“Hu”用来致敬他的“前任”公司,“tool”就是工具的意思,谐音就有意思了,“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”(一个开源类库,上升到了哲学的高度,作者厉害了)。看了一下转载 2020-10-23 12:09:16 · 2590 阅读 · 0 评论 -
Java实现多个线程一起并发执行
面试人员:用Java的多线程模拟一个赛马,马场上有10匹马,要求他们同时起跑设计到的Java多线程技术:CountDownLatch或者CyclicBarrier/** * <p> * <p>Title:testCountDownLatch.java</p > * <p>Description: </p > * <p>Date:2020/10/20 14:53</p > * * @author wsh原创 2020-10-20 16:45:33 · 10838 阅读 · 1 评论 -
Java类的加载机制(类加载和初始化顺序)
Java类加载机制中最重要的就是程序初始化过程,其中包含了静态资源,非静态资源,父类子类,构造方法之间的执行顺序。这类知识经常会出现在面试题中,如果没有搞清楚其原理,在复杂的开源设计中可能无法梳理其业务流程,是java程序员进阶的阻碍。 public class CodeBlockForJava extends BaseCodeBlock { { System.out.println("这里是子类的普通代码块"); } publi原创 2020-10-14 14:55:28 · 371 阅读 · 2 评论 -
一次代码评审,差点过不了试用期!
沉淀、分享、成长,让自己和他人都能有所收获!????转载 2020-09-17 11:40:39 · 342 阅读 · 0 评论 -
Java如何设计一个类
1. 类和成员最小化可访问性 问题 要区分设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部其他模块而言,是否隐藏其内部数据和其他细节。设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离起来,模块之间只通过它们的API进行通信,那么,在设计类和成员时有怎样的设计原则? 解决 设计类和成员有这样几个基本原则: 尽可能使每个类或者成员不被外界访问,应该使用与你正在编写的软件的对应功能相一致的、尽可能最小的访问级别;对于成员(域、方法、嵌套类或者嵌套接原创 2020-09-17 10:42:17 · 4155 阅读 · 0 评论 -
Java 集合
大致分类:List、Set、Queue、MapIterableCollection 接口中继承 Iterable 接口。这个接口为 for each 循环设计、接口方法中有返回Iterator对象public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objec...原创 2020-09-16 20:36:37 · 129 阅读 · 0 评论 -
Java之集合
ListJava中常用的数据类型。List是有序的collection。一共有三个实现类ArrayList:最常用的list的实现类,内部通过数组实现,数组的缺点是每个元素之间不能有分隔,但数组的大小不能满足需要,需要增加存储能力,就要将已经有数组的数据复制到新的存储空间。适合随机查询,不利于删除,插入。 Vector:与ArrayList一样,也是通过数组来实现,不同的是它支持多线程的同步,即某一个时刻只有一个线程能够写vector,避免多线程同时写引起的数据不一致,当实现同步也...原创 2020-09-16 16:18:48 · 146 阅读 · 0 评论 -
HashMap:存储结构、扩容机制和线程不安全解决
1.什么是HashMap1.1 什么是map?1.key-value格式存储集合类 2.key必须唯一,无重复值 3.map是与collection同一个等级的接口复制代码1.2 什么是hash?1.把任意长度的输入,通过(hashCode()方法),变换成固定长度的哈希值(hashCode,这种函数就叫做**哈希函数**,而**计算哈希值的过程就叫做哈希**。 2.哈希的主要应用是哈希表和分布式缓存。 3.哈希函数是哈希算法的一种实现。 参考:https://b原创 2020-09-16 15:54:40 · 226 阅读 · 0 评论 -
java连接ftp服务器
使用Java连接Ftp并且实现文件的上传下载1.使用maven工程的话需要引入Maven的pom <!--连接ftp使用--> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3&原创 2020-09-11 14:03:27 · 4059 阅读 · 3 评论 -
java中哪些集合是线程安全的,哪些是线程不安全的
1. 常见集合这里自己总结了一些比较常见的java集合,对于这些集合的特点和区别后期博客中会进行总结介绍:2.什么叫“集合是线程不安全的”首先我们来了解一下什么叫集合是线程不安全的:当多个并发同时对非线程安全的集合进行增删改的时候会破坏这些集合的数据完整性;例如:当多个线程访问同一个集合或Map时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。3. 线程安全和线程不安全的集合Vector、HashTable、Properties是线程安全的;转载 2020-09-01 10:18:32 · 3471 阅读 · 2 评论 -
Java 定时任务的几种实现方式
介绍三种实现方式:JDK 自带的定时器实现Timer类 这个类允许你调度一个java.util.TimerTask任务。主要有以下几个方法:void schedule(TimerTasktask, Datetime) 安排在指定的时间执行指定的任务。 void schedule(TimerTasktask, DatefirstTime, longperiod) 安排指定的任务在指定的时间开始进行重复的固定延迟执行...转载 2020-08-17 15:07:43 · 256 阅读 · 0 评论 -
Java Map,List,Set,String[]之间的转换
Map和Listmap.values转list:Collection<Object> values = resultMap.values();ArrayList<Object> resultList = new ArrayList(values);Map和setmap转set(主要用于迭代遍历)map.keySet();map.entrySet();set转map就是遍历添加暂无提供简便方法List和Set(一般是用来去重)list转set转载 2020-08-05 11:20:18 · 1646 阅读 · 0 评论 -
如何将官方的Java API文档制作成chm格式文件
进入Oracle官网下载Java API文档,将下载后的文档解压使用CHMWriter制作双击"CHMWriter.exe", (如果报错,可以点击CHMWriter.jar来运行程序)在弹出的窗口中, 输入:1.java doc文档目录(例如D:\jdk-8u221-docs-all\docs\api,或直接将doc文档目录或doc文档目录下的任一文件拖进窗口),2.待生成的chm文件名(例如jdk-8u221 api),3.chm文件标题(例如jdk-8u221 api), 点击"生成原创 2020-07-08 11:29:02 · 1083 阅读 · 0 评论 -
Java客户端使用FastDFS上传文件
在搭建完成fdfs文件服务器之后,我们就可以使用这个文件服务器的功能了,fdfs提供了一个java客户端,接下来看看如何简单在java中使用fdfs上传文件首先我们要添加依赖: <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1原创 2020-07-08 11:25:33 · 637 阅读 · 0 评论 -
Java根据文件名取得文件扩展名
根据不同的带扩展名的文件名获取后缀扩展名代码如下:/** * 根据文件名取得文件扩展名 * * @param fileName * @return */ private String getFileExtension(String fileName) { if (fileName == null) { return null; } int lastPosDot =原创 2020-07-06 09:34:08 · 863 阅读 · 0 评论 -
详解java中的String类的substring()方法
substring()方法功能:substring()方法是String类的一个方法,故该方法的调用者为String类的对象,即字符串。str.substring(indexStart,indexEnd)功能为:截取方法调用者(即str)的从indexStart到indexEnd(包括indexStart,不包括indexEnd;即含头不含尾、或左闭右开区间内的子字符串)例如:public class App { public static void main(String[] ar原创 2020-07-03 17:52:55 · 1918 阅读 · 0 评论 -
java中InputStream转化为byte[]数组
在commons-io包中org.apache.commons.io.IOUtils类的toByteArray(InputStream input)已经有实现了,我们可以参考下思路,完成我们的方法,我们可以用类似下面的代码实现inputStream转化为byte[]数组public static byte[] toByteArray(InputStream input) throws IOException { ByteArrayOutputStream output = new ByteAr原创 2020-07-02 14:04:50 · 1897 阅读 · 0 评论 -
JDK1.7和1.8Base64编码和解码的坑
JDK1.6和1.7里对Base64编码和解码使用的是BASE64Decoder(),而JDK1.8API里添加了Base64,JDK1.8编码和解码时不用考虑内容的换行符,而JDK1.6和1.7需要考虑编码和解码内容里的换行符。JDK1.6和1.7编码和解码:编码:BASE64Encoder b64 = new BASE64Encoder();String encode = b64.encode(byte[] array);String msg = encode.replaceAll("原创 2020-06-18 16:10:35 · 3243 阅读 · 0 评论 -
Java实现将word转化为PDF
这个工具类全面支持DOC, DOCX,OOXML, RTF HTML,OpenDocument,PDF, EPUB, XPS,SWF 相互转换转化时需要的jar包和pom:jar包地址如下:链接:https://pan.baidu.com/s/1w1aMvTYqMKRhrRtum88HbQ提取码:y1qg<!-- https://mvnrepository.com/artifact/com.aspose/aspose-words --> <dependency>.原创 2020-06-17 14:49:12 · 1525 阅读 · 11 评论 -
Java实现文件的上传下载
实现文件的上传下载使用的Maven仓库依赖: <!-- spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.1.RELEASE</version> <exclusions原创 2020-05-27 16:46:51 · 244 阅读 · 0 评论 -
Java实现Excel导出时表格样式调整工具类
需要的Maven仓库依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.7</version> </dependency> <dependency> <groupId>org.apa原创 2020-05-27 14:55:06 · 1245 阅读 · 0 评论 -
Java实现Excel导出的工具类_二
导出Excel需要的Maven仓库依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.7</version> </dependency> <dependency> <groupId>原创 2020-05-27 14:52:07 · 195 阅读 · 0 评论 -
Java实现Excel导出的工具类_一
实现需要的Maven仓库依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.7</version> </dependency> <dependency> <groupId>org.apa原创 2020-05-27 14:49:12 · 274 阅读 · 0 评论