Java
文章平均质量分 68
Java相关技术文章
森伯416
热爱技术的洁癖型码农一枚,喜欢分享所知所见
工作经历:华为、阿里、PDD
展开
-
内存溢出与内存泄漏
内存溢出概念内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。常见情况1.java.lang.OutOfMemoryError: PermGen space (持久带溢出)我们知道jvm通过持久带实现了java虚拟机规范中的方法区,而运行时常量池就是保存在方法区中的,因此发生这种溢出可能是运行时常量池溢出,或是由于程序中使用了大量的jar或class,使得方法区中保存的class对象没有被及时回收或者class信息占用的内存超过转载 2021-09-09 15:06:15 · 186 阅读 · 0 评论 -
BigDecimal进位
public BigDecimal volumeHandle(String value) { // 默认值为1 BigDecimal defaultValue = new BigDecimal(1); // 保留2位数,多的进1 BigDecimal volume = new BigDecimal(value).setScale(1, BigDecimal.ROUND_UP); // 如果值小于1则置为1 if原创 2021-08-31 14:17:45 · 1054 阅读 · 0 评论 -
CSV乱码 - UTF-8 Unicode (with BOM)
Unicode统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是Unicode的最大好处。 就是将世界上所有的文字用2个字节原创 2021-08-12 17:59:27 · 5206 阅读 · 0 评论 -
反射获取类的所有属性/方法(包括父类)
我们都知道可以通过 Class 类的方法获取类的所有属性和方法获取该类所有属性:java.lang.Class#getDeclaredFields获取该类所有方法:java.lang.Class#getDeclaredMethods但是当这个类是子类,我们又想获取所有属性时这两个方法能支持吗?答案是不行。通过这两个方法的注释可以看出,方法将返回 Field/Method 数组,包含这个对象所有的属性或方法(public, protected, default),但是不包含继承的属性或方法。那要原创 2021-06-16 22:24:05 · 3672 阅读 · 3 评论 -
ThreadLocal学习
是什么其作用是创建线程局部变量。通常情况下我们创建的变量可以被任意一个线程访问并修改,而 ThreadLocal 创建的变量只能被当前线程访问,其他线程无法访问和修改,所以就不存在线程安全问题。解决的问题每个线程都需要有属于自己的实例数据(线程隔离)实例需要在线程中的多个方法共享,不希望使用传参的形式ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。demo示例code // 初始化,并赋初始值:d原创 2021-03-29 15:23:53 · 201 阅读 · 0 评论 -
ThreadPool full问题排查
问题背景目前LEX业务场景包含两个模块:FM、LineHaulShuttle,都是通过ODPS离线同步然后通过Blink发送到gateway的MQ,两个QPS分别是:FM-1000/s,LineHaulShuttle-600/s,会对系统有个短暂的冲击,目前系统未经过压测,所以对于系统的抗压能力我们是不清楚的,如下就是接入LinHaul场景时发现的异常:线程池占满问题排查由于Lindorm入库、发风控是使用了线程池异步操作的,这样不仅能提高系统处理效率还能提高吞吐量,但是由于线程资源有限,所以就会发原创 2021-02-25 13:39:09 · 892 阅读 · 0 评论 -
单元测试Transactional自动回滚
使用 junit 进行单元测试,发现如下用例操作成功,但是数据库里没有新增数据,查看运行日志 Rolled back transaction for test,发现事物自动回滚了,通过 添加 @Rollback(value = false)强制提交事物。@Test@Transactional// @Rollback(value = false)public void insert() { String name = "dkangel"; userMapper.insert(name, "原创 2020-07-13 10:50:26 · 1272 阅读 · 1 评论 -
UTF-8-BOOM
BOOM转自:https://www.cnblogs.com/flyingeagle/articles/9825302.htmlBOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF-16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型对于UTF-8来说,BOM并不是必须的,因为BOM是用来标记多字节编码文件的编码类型和字节顺序(big-endian或little-endian)带BOM和不带BOM的区别UTF-8 和带原创 2020-06-24 17:14:20 · 833 阅读 · 0 评论 -
Java字母与数字互转
26个字母abcdefghijklmnopqrstuvwxyza-z: 97 - 122A-Z: 65 - 90小写转大写: char - 32‘a’ - 32 -> A大写转小写: char + 32‘A’ + 32 -> a获取字母的ACSII对应数字: 强转int (int) char(int) ‘a’ -> 97数字转字母:强转char (char) int(char) 97 -> a...原创 2020-06-23 11:26:16 · 7318 阅读 · 0 评论 -
Serializable 序列化与反序列化
序列化序列化:将对象写入IO流反序列化:从IO流中恢复对象意义:序列化是将对象转为字节序列,这些字节序列可以保持到磁盘,或通过网络传输。序列化使得对象可以脱离程序的运行而独立存在。使用场景:对象需要保存到磁盘对象需要进行网络传输具体实现实现 Serializable 接口Serializable是一个标记接口,不需要实现任何方法,实现该接口的类可以被序列化。序列化对象Demo该程序会将 user 对象序列化并保持到磁盘,后续读取文件并反序列化成 user 对象,并在控制台打原创 2020-06-19 14:04:45 · 298 阅读 · 0 评论 -
Map遍历与转换
目录遍历map的方式1. 遍历 key 或 value2. 使用 Iterator 遍历(可删除元素)3. 使用 entrySet 遍历(效率高于Lambda)4. 使用 Lambda 表达式方式选择String 转 Map (fasterxml)Map 转 StringIterator -> forEach(java5) -> Lambda(java8)遍历map的方式1. 遍历 key 或 value// 遍历keyfor (String key : map.keySet())原创 2020-06-18 16:44:55 · 484 阅读 · 0 评论 -
结合JVM解读浅拷贝和深拷贝
java.lang.Cloneable和java.io.Serializable一样属于标记型接口,没有定义任何方法和属性。一个类想要使用克隆方法重写clone()方法,因为Object的clone()的修饰符是protected;@HotSpotIntrinsicCandidateprotected native Object clone() throws CloneNotSupportedException;实现Cloneable接口,否则会抛出CloneNotSupportedEx原创 2020-05-10 12:57:59 · 559 阅读 · 0 评论 -
equals使用及重写equals方法为什么要重写hashCode?
equals的使用用来判断两个对象是否相等。类如果没有重写Object的equals方法,则比较的是对象在堆中的地址是否相等 “this == obj”类如果重写了equals方法,一般是用来比较对象的属性是否相等为什么要重写equals?为什么要重写equals方法?主要看使用场景,如果不需要进行对象比较旧不需要重写。举个栗子,用户要修改用户名,传了个User对象过来,此时从DB...原创 2020-05-07 22:45:16 · 366 阅读 · 0 评论 -
记录一次查询调优过程
记录一次查询调优过程前提调优过程中使用explain命令查看执行过程,包括执行时间、扫描方式、是否用到索引等,EXPLAIN 使用浅析开启查询sql执行时间:\timing on关闭查询sql执行时间:\timing off一. 问题描述一个查询接口被频繁调用,且查询过程较慢二. 优化思路首先考虑优化SQL语句其次考虑优化业务代码最后考虑是否需要添加缓存机制...原创 2020-04-20 13:08:43 · 202 阅读 · 0 评论 -
idea报错: "cannot access xxx"
背景:项目迁库,将引用到其他项目的jar包copy到本项目中,发现IDEA报"cannot access xxx"的错误。原创 2020-03-16 12:01:17 · 1526 阅读 · 0 评论 -
批量图片转Base64编码
批量图片转Base64编码一切尽在代码中,Base64编码显示图片—踩坑笔记import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import j...原创 2019-12-21 15:48:52 · 1958 阅读 · 0 评论 -
char类型数字转int
char类型数字强转int,输出的是对应的ASCII值,如 ‘9’ 对应的值是 57public static void main(String[] args) { System.out.println((int) '0' + " " + (int) '9');}结果:最简单的方法 char - '0'public static void main(String[] args...原创 2019-11-30 15:14:36 · 1642 阅读 · 1 评论 -
Java获取zip文件流
项目中经常遇到需要导出压缩文件的情况,需要压缩的数据来源有网络数据、静态资源,常见的导出场景有:操作日志、密钥文件的导出等。导出方案生成zip文件保存到磁盘,返回时读取文件内容需要考虑文件的生成策略,防止并发情况下文件冲突;文件的删除策略,无用文件及时删除,避免磁盘空间的浪费。保存到内存中,返回时从内存中读取二进制内容以流的形式传输数据,避免临时文件的生成,完成后关闭流,z...原创 2019-11-23 11:04:14 · 5714 阅读 · 1 评论 -
Java 文件/文件夹压缩
使用java.util.zip包实现文件压缩ZipOutputStreampublic ZipOutputStream(OutputStream out) 构造函数,创建zip输出流public void putNextEntry(ZipEntry e) 设置每一个ZipEntry对象,即设置压缩元素名称(文件名)public void setComment(String comment...原创 2019-11-22 11:08:45 · 281 阅读 · 0 评论 -
win7用java实现简单版360wifi
win7如何用java调用cmd实现wifi的例子,查了好久都是千篇一律的手动操作cmd和网络共享中心,所以决定自己写一个,也不枉我这几天的努力。原创 2017-03-13 16:47:08 · 1675 阅读 · 0 评论 -
学生学籍管理系统~~功能界面
之前介绍了登录界面的设计,现在介绍一下注册管理员和录入信息的部分。 设计注册管理员的思想是:默认一个拥有创建用户的管理员,这个管理员可以创建数据库登录用户(相当于创建教师),而这些用户只能登录和进行其他操作没有创建用户的功能(类似于教师不能创建教师), 创建用户成功后,会将账号密码和昵称保存到My_Adminstrator表中。 登录界面的作用是验证是否能登录数据库,登录成功后将账号、密码通过参数的形式通过其他类的构造函数传递过去,再在其他类中重新连接数据库。原创 2017-05-23 23:21:47 · 9022 阅读 · 4 评论 -
Runnable和Thread的使用简介与区别
在java中有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口。举例子说明两种方法的用法,以及它们的区别与联系转载 2017-03-22 22:13:46 · 661 阅读 · 0 评论 -
利用TCP实现简单聊天程序
TCP通信的特点是面向连接,即通信双方必须先建立连接然后才能进行通信,安全性比较高,保证信息的正确性。先介绍客户端怎么连接服务器端:服务器打开某个端口并进行监听,等待客户端连接;客户端根据服务器的IP地址,连接服务器的某个端口。服务器端用ServerSocket(port)打开port端口并监听,客户端用Socket(IP,port)连接服务器端的port端口。在服务器端用accept函数原创 2017-04-23 22:16:54 · 6307 阅读 · 2 评论 -
java中堆和栈
Java中把内存分为两种:栈内存和堆内存栈内存:一些基本类型的变量(int, short, long, byte, float, double, Boolean, char)和对象的引用变量都在函数的栈内存中分配。代码中定义一个变量,Java就在栈中为这个变量分配内存空间,当超过变量的作用域时,Java会自动释放该变量的内存空间,该内存空间可以被使用。堆内存:用来存放由new创建的对象转载 2017-03-24 13:51:49 · 408 阅读 · 0 评论 -
Java中基本数据类型的范围
Java中基本数据类型的范围1、整型byte:1字节 -2^7 2^7 - 1short:2字节 -2^15 2^15 - 1int:4字节 -2^31 2^31 - 1long:8字节 -2^63 2^63 - 12、字符型float:4字节 float类型的数值有一个后缀 f (例如:3.0f )double:8字节 没有后缀F的浮点数值(如3.14)默认为double类型3、char型char:2字节4、boolean型boolean:1字节 范原创 2017-09-28 23:30:13 · 2227 阅读 · 0 评论 -
移位运算符<<、>>、>>>在Java中的用法
<<:左移: 8 <<= 1 相当于8 * 2^1、8 <<= 2 相当于8 * 2^2>>:右移:8 >>= 1 相当于8 / 2^1、8 >>= 2 相当于8 / 2^2>>>:无符号右移:无符号右移,忽略符号位,空位都以0补齐(在代码中有计算方法)原创 2017-10-07 22:43:39 · 1478 阅读 · 0 评论 -
线程池的简介及四种创建方法
适用场景像Web服务器、数据库服务器、文件服务器、邮件服务器等服务器应用程序都是处理来自某些远程来源的大量短小的任务。服务器经常出现的情况是:单个任务处理的时间很短而请求的数量巨大。简单的构建方式每当一个请求到达就为其创建一个新线程,然后在新线程中为其服务。优点:适用于原型开发缺点:用于服务器存在诸多问题,为每个请求创建一个新线程的开销很大;花费在创建和销毁新线程上的时间和资源...原创 2017-10-22 11:03:03 · 8829 阅读 · 2 评论 -
Java实现多线程的四种方式
一、继承Thread类,重写run方法二、实现Runnable接口,重写run方法,通过new Thread启动start方法三、通过Callable和FutureTask创建线程四、通过线程池创建线程转载 2017-10-14 21:58:18 · 397 阅读 · 0 评论 -
try catch finally的执行顺序
通过编写一些常见的例子来更深入的理解try、catch、finally的执行顺序,代码如下:import java.util.Scanner;/* * 通过sum函数返回的值来确定return了哪个 * 0:默认返回 * 1:finally的返回值 * 2:通用异常Exception * 3:特定异常,这里是数字格式异常NumberFormatException * result:try的返回值 * Author:DKangel * 注:0和1、2无法共存 */public clas原创 2017-11-02 21:39:43 · 1869 阅读 · 0 评论 -
学生学籍管理系统~~登录界面(Java、SQL)
有些同学跟我要代码但是因为我没及时看到所以没能及时回复,很抱歉!于是把代码放到github里了。https://github.com/DKAngel/DatabaseExperiment 这次所要介绍的内容是数据库课设做的东西。利用数据库SQL server 2008与Java设计实现学生学籍管理系统,分为几次步骤来介绍。第一次介绍准备、登录界面的设计,第二次介绍注册、学籍管理等界面的设计,...原创 2017-05-22 19:50:57 · 21206 阅读 · 49 评论 -
最长回文字符串
回文字符串欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入package hua...原创 2018-11-10 22:42:37 · 268 阅读 · 0 评论 -
@Valid和@Validated的区别及使用
1、用途以注解的方式实现接口参数校验2、优点统一接口校验方法,并且可以指定相应的异常信息,避免手动写if else判断参数是否合法3、使用方法配置相应参数的注解,并在controller或方法开启校验3.1 @Valid的使用用于校验实体类参数,用于方法入口3.2 @Validated的使用用于校验除实体类的接口参数,用于Controller上成功登录:登录失败:成功退出登...原创 2019-04-18 17:45:01 · 3351 阅读 · 0 评论 -
Java使用Workbook/Sheet读取excel行数
### WorkBook/Sheet简介WorkBook:工作簿,相当Excel文件。Sheet:工作表,一个工作簿含有多个工作表。### 使用示例``` /** * 获取excel文件实际行数 * * @param file */public static int readFileLength(MultipartFile file) { // 文件函数 int lineLength = 0; // 声明workbook对象原创 2019-07-08 19:57:57 · 7209 阅读 · 1 评论 -
Base64编码显示图片---踩坑笔记
Java将图片转为base64编码直入主题,先上代码 /** * 获取图片的Base64编码字符串 * * @param imgPath 文件路径 * @return */ public String getImgBase64(String imgPath) { // 将图片转为字节数组 byte[] imgData = null; try { imgData = File原创 2019-07-25 14:06:11 · 1956 阅读 · 0 评论 -
利用UDP实现用户聊天程序
UDP是面向非连接的,UDP传输的是数据报只负责传输信息,不保证信息一定收到,虽然安全性不如TCP(面向连接、用Socket进行通信),但是性能较好。从简单到复杂,首先简单介绍一下怎么利用UDP实现客服端发送消息给服务器端吧:原创 2017-04-08 01:24:54 · 16142 阅读 · 3 评论