Java
一笑杯莫停
HelloWorld
展开
-
Java 关于网段的一些操作和校验
判断指定IP地址是否在目标网段原创 2022-05-10 14:00:11 · 1135 阅读 · 3 评论 -
java输入IP地址判断地址类型
java实现校验ip地址类型原创 2022-05-06 17:44:30 · 906 阅读 · 0 评论 -
GridFsTemplate store文件
public ObjectId store(InputStream inputStream, String originalFilename) { return gridFsTemplateFourth.store(inputStream, originalFilename); }一般只存文件,就可以这样。结果是:可以根据id查询,也可以根据文件名来查询。 public GridFSFile findScriptFile(String id...原创 2021-08-30 18:09:12 · 629 阅读 · 0 评论 -
谈谈Java类加载过程及对象创建过程
由一段代码带来的思考代码先看一段代码:public class Base{ private String baseName = "base"; public Base() { callName(); } public void callName() { System. out. println(baseName); } static class Sub extends Base {原创 2021-03-24 17:46:49 · 184 阅读 · 0 评论 -
ThreadLocal原理分析及内存泄漏解决方法
目录并发问题ThreadLocal实现原理准备引用(reference)1. 强引用(Strong Reference)2. 软引用(Soft Reference)3. 弱引用(Weak Reference)4. 虚引用ThreadLocal原理内存泄漏避免内存泄漏的方法总结并发问题回顾之前写过的关于多线程并发的博客,并发问题的原因主要有三种:CPU缓存导致的可见性问题 JVM优化导致的CPU指令执行顺序问题 线程切换导致的原子性问题...原创 2020-09-21 17:12:56 · 637 阅读 · 0 评论 -
ThreadLocal如何在父子线程及线程池中传递
子线程如何获取父线程的本地变量?子线程提交任务时,获取父线程ThreadLocal的值case之前遇到过多个线程都需要使用SimpleDataFormat对象来做日期格式化,当时第一时间想到的就是定义一个static的SimpleDataFormat让多线程共享。但是很显然这样做就是在写bug,因为SimpleDataFormat不是线程安全的,势必会出现并发问题。解决问题解决并发问题有很多种悲观锁:使用简单,但锁粒度比较大,对读和写一视同仁 乐观锁:写少读多 线程本地变量:提供原创 2020-09-21 11:20:29 · 1754 阅读 · 0 评论 -
Java获取00:00:00和23:59:59时间戳工具类
项目中业务用到了获取当天00:00:00和23:59:59时间戳,网上查了下好多实现都不满意,而且都抄来抄去的,还是自己研究写一个。可能还有更好的实现方式,以后再补充。public class TimeUtil { /** * 获取当天00:00的时间戳 * * @return 时间戳 */ public static Long getStartTime() { Calendar calendar = Calendar.get.原创 2020-08-28 11:48:40 · 2858 阅读 · 1 评论 -
为什么PrepareStatement性能更好更安全?
行业现实在于面试要求大而全,实际工CRUD。以前我也觉得什么数据库搭建,什么性能优化,什么缓存。都是DBA要考虑的,我们只管CRUD。什么?你们公司连DBA都没有?太落后了吧?现在发现,以前都是井底之蛙,没机会遇到性能问题,而不是没有性能问题。现在基本上出去面试,SQL优化,数据库优化,JDBC底层原理都是硬性指标了。闲话不扯,主题开始吧。我们Java用SQL操作数据库,有两种方式:直接提交用Statementstatement.executeUpdate("UPDATE Users .原创 2020-08-14 16:14:18 · 566 阅读 · 0 评论 -
Magic Number 校验Excel文件(Java)
工作中遇到需要用poi解析导入的Excel文件的case,之前同事写的,我发现他做文件格式校验只是做了文件名后缀的解析。这样会有个问题,就是其他格式的文件是可以修改后缀的,这样就可以通过校验,做解析。虽然也有异常处理,但是我们无法定位到这是因为文件格式不对抛的异常。所以我在网上查了下,发现一个校验方法,就是通过魔数(Magic Number)。最著名的魔数就是平方根倒数算法,雷神之锤:i = 0x5f3759df - ( i >> 1 ); 我也不懂啥意思,先不管。我们平时写代码你在原创 2020-07-31 17:02:37 · 1002 阅读 · 5 评论 -
浅谈Java反射机制(类加载器)
学习java的都应该知道java有个高级特性,反射(reflection)。如果去读Spring框架源码,你会发现它的应用真的是无处不在。因为Spring核心功能IOC(控制翻转)就是用反射来实现的,不然我们不new,你以为对象是哪里来的。有这么一个场景:在程序运行时,你首先根据某个Class对象里的构造方法或者一般方法,然后考虑要实例化这个对象来用。 另一个场景是:我们需要对某个Class对象里面的方法,变量进行自检。那么我们就使用反射机制来实现。但反射机制是如何实现的呢?我有点好奇。百度一下Ja原创 2020-07-28 21:31:47 · 398 阅读 · 0 评论 -
Netty Reactor模式相关知识点总结
一、Netty对三种I/O的支持舍弃了BIO的支持是因为Netty应用在高并发场景下,此时BIO性能是扛不住的,因为它阻塞,占用cpu资源比较厉害,不适合这种场景。当然并不是说NIO就一定性能优于BIO,在某些并发度低,连接数少的情况下,BIO的性能是优于NIO的。 舍弃AIO是因为我们部署服务器一般都部署在Linux系统,什么原因此处不赘述。而Linux系统的同步非阻塞IO,多路复用模型实现epoll其性能优于windows的Select实现。所以Netty支持NIO,据说Netty的实现垃圾.原创 2020-07-09 23:37:05 · 151 阅读 · 0 评论 -
自定义注解校验API参数电话号
注解在创建注解之前,我们首先明确电话号码校验逻辑,要实现:手机号码不能为空 符合手机号的正则表达式 电话号码的长度校验创建接口@Documented@Constraint(validatedBy = PhoneNumberValidator.class)@Target({ElementType.FIELD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)public @interface PhoneNumber原创 2020-07-06 16:01:58 · 570 阅读 · 0 评论 -
Kafka 版本该怎么选择总结
买了极客时间胡夕老师的课,上面讲到kafka各版本之间的差异,在这里总结一下,时机应用的时候该如何去选择kafka版本。Kafka 版本命名kafka版本已经更新到2.5了我们看下kafka版本号的组成kafka_2.12-2.5.0.tgz前面的2.12表示的是kafka开发语言Scala的版本,后面的2.5.0才是kafka版本。作为Javaer Scala我们都熟悉,JVM系的语言。设计上很有优势,以至于java的很多新特性都跟Scala靠拢,比如Lambda表达式,函数式编程等。原创 2020-07-06 15:58:33 · 5473 阅读 · 0 评论 -
二进制补码
刚刚遇到一个题,求b的值byte b = (byte)129;刚拿到题,我们一看,哎,这不是强制类型转换吗?byte是有符号的,于是乎我们就开始算了:byte一个字节,也就是8位二进制那129就是:10000001一看是有符号的,那就是符号位不变,其他位置反码+1:11111110+1=11111111=-127(1+2+4+8+16+32+64)balabala~算了半天,半...原创 2020-04-03 09:58:44 · 400 阅读 · 0 评论 -
wait()和sleep()的区别理解
说实话,除了他们的执行都会让线程阻塞状态以外,我并不认为他们有什么可比性。1.wait()、notify() 和 notifyAll()方法都是Object的方法,只能在临界区被执行。2.wait()执行后锁标识会被释放,使用场景是一些不满足条件的线程抢到锁后,为了让条件满足后再来让它执行,就调用这个方法。然后等条件满足后,再调用notify() 和 notifyAll()让它活着它们苏醒...原创 2020-04-02 15:09:58 · 513 阅读 · 0 评论 -
死锁杂谈
以前我没说锁和被保护的资源是1:N的关系,这些被保护的资源有可能是彼此没关联的,也有可能彼此关联。保护没有关联关系的多个资源由于这些资源彼此没关系,我们可以把他们全都塞进this这把锁里一了百了,我们也可以给不同的资源加不同的锁分而治之。总的来说并行分而治之的性能肯定要比串行的同一把锁好的多。分而治之的这种锁也叫细粒度锁保护有关联关系的多个资源有关联的资源也可以像没关联的资源那样加...原创 2020-03-27 17:25:09 · 164 阅读 · 0 评论 -
学习笔记(3)——Java如何解决并发编程线程切换导致的原子性问题
上一篇笔记写了如何解决并发导致的三个问题其中两个:缓存导致的可见性问题和编译优化导致的顺序性问题,我们可以通过按需进行禁用缓存和编译优化来解决。指导我们如何按需禁用引出java内存模型的概念。那么这篇笔记的主要目的是讨论如何解决线程切换导致的原子性问题。思考如何解决原子性问题:原子性:一个或者多个操作在CPU上执行不被中断的特性很显然,原子性问题是线程切换导致的,我们只要禁用线程切...原创 2020-03-27 13:57:39 · 505 阅读 · 0 评论 -
学习笔记(2)——Java如何解决并发编程的可见性和有序性问题
目录Java内存模型使用volatile关键字的疑惑Happens-Before 规则1.程序顺序性规则2. volatile 变量规则3. 传递性4. 管程中锁的规则5. 线程 start() 规则6. 线程 join() 规则7.final上一篇,学到了Java并发编程的三大BUG来源,它们分别是:缓存导致的可见性问题 线程切换导致的原子...原创 2020-01-08 11:29:19 · 145 阅读 · 0 评论 -
学习笔记(1)——并发编程BUG来源
目录1.缓存导致的可见性问题2.线程切换导致的原子性问题3.编译优化带来的有序性问题4.volatile不管是什么语言,并发编程都是难点,知识点也比较零散。大神Doug Lea也没具体的发过什么相关论文。总之要啃这么难啃的饼,我们没有什么捷径可走,只有弄清楚原理,原因才能从根本上解决问题。随着CPU,内存,I/O设备的不断更新换代,我们的计算机性能越来越强大。但是有个核心的...原创 2020-01-03 16:14:26 · 150 阅读 · 0 评论 -
线程池总结
1.为什么要用线程池?创建线程和线程销毁的开销比较大,占用的时间恐怕要比我们正常业务的时间还要大。而且业务需要可能会频繁的进行创建和销毁,再加上我们本身的业务线程,可能会导致系统资源不足,这种不可控的开销是我们无法接受的。所以我们可以简化这个过程。假如在业务开始之前就维护一组线程,用的时候直接用岂不是很快?2.线程池的作用提高效率:如上面说的,业务开始之前我们就维护一个线程池,拿来即用...原创 2019-12-12 14:04:21 · 67 阅读 · 0 评论 -
java-关于hashCode()和equals()的重写
很久之前看了一篇半吊子文章,理解错了。去参加了个面试,跟别人滔滔不绝的讲了半天,结果回来一查,错了,好尴尬!辣鸡害人不浅。现在我就总结一下,踩过的坑,含着泪也要填了。先来看下面试官怎么问的。为什么要重写hashCode()和equals()?其实我们平时用的多的就是集合里的对象判断是否相等。比如说HashMap中put一个键值对,看它的底层方法实现:public V put(K ke...原创 2019-12-11 14:53:34 · 202 阅读 · 0 评论 -
求一个负整数的二进制
首先int类型是4个字节,一个字节是8位假如现在有一个负数-5首先列出5的二进制0000 0000 0000 0000 0000 0000 0000 0101计算方式:5/2=2 余12/2=1余01/2=0余1取反码:1111 1111 1111 1111 1111 1111 1111 1010反码+11111 1111 1111 1111 1111 ...原创 2019-12-03 18:44:38 · 724 阅读 · 0 评论 -
netty基础概念
声明:此文章非本人所 原创,是别人分享所得,如有知道原作者是谁可以联系本人,如有转载请加上此段话1.BIO、NIO 和 AIO 的区别?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多...转载 2019-11-25 09:24:13 · 113 阅读 · 0 评论 -
SpringBoot添加一个model作为初始化模块,打成jar包后,读取resources目录下的多个文件上传
项目中有遇到项目jar包启动后上传resource目录下某个文件夹(优先上传jar包同目录文件夹里的所有文件)。网上找了很久,现在总结一下。1.项目启动时初始化可能又很多种实现方法,但目前我只研究过一种,那就是实现CommandLineRunner接口,要实现初始化的逻辑放在实现的run方法中执行,代码如下: @Override public void run(Stri...原创 2019-11-20 09:56:21 · 911 阅读 · 0 评论 -
Java内部类的作用
在普通类里面在创建一个类,这个类叫做内部类。内部类大致分为4类:成员内部类、局部内部类、匿名内部类和静态内部类一、内部类分类定义一个接口方便示例:package helloworld;/*** 接口**/public interface InterfaceTest{ void helloWorld();}1.成员内部类:成员内部类是最普通的内部类,它的定...原创 2018-09-25 15:49:04 · 153 阅读 · 0 评论 -
JSONObject 一些操作
1. 插入元素JSONObject jsonObject =JSONObject.parseObject(param);kpiCfgObject.put(key,value);2.遍历for (Map.Entryentry :jsonObject.entrySet()) {entry.getKey() +"&" +entry.getValue().toString(...原创 2018-09-25 15:55:45 · 1320 阅读 · 0 评论 -
Java 动态代理$Proxy0的代码是如何获得的
看了很多关于此类的文章,都没说明白$Proxy0的代码如何获取,这儿就贴一段行之有效的方法吧public class CodeUtil {public static void main(String[]args)throws IOException {byte[]classFile =ProxyGenerator.generateProxyClass("Proxy0",HumenIm...原创 2018-09-25 16:01:33 · 1883 阅读 · 0 评论 -
Java中字符串比较方法equals()和equalsIgnoreCase()的区别
1. equals()equals( )是比较两个字符串是否相等,它的一般表达式如下:/** * Compares this string to the specified object. The result is {@code * true} if and only if the argument is not {@code null} and is a {@c...原创 2018-09-26 13:17:29 · 1276 阅读 · 0 评论 -
AOP -连接点和切点的区别
一直没搞懂连接点和切点的关系区别,《spring 实战》这本书第四章有介绍,但是还是没看懂。所以查了点资料,感觉还是通过代码看最直观。1. 创建一个简单的aspect切面classpublic class Logging {/** * This is the method which I would like to execute * before a selecte...原创 2018-09-26 14:32:58 · 7125 阅读 · 0 评论 -
list.isEmpty() CollectionUtils.isEmpty(list)区别?
一直都在用 CollectionUtils.isEmpty(list)这种工具类提供的判断方法,但是List本身也有提供一个list.isEmpty() 方法,为什么我们不用它本身的方法呢?而且既然方法名称都一样,为什么它就不行呢?于是我有点不甘心,决定试一下:public class ListTest {static List> list =null;public stati...原创 2018-09-27 19:29:28 · 30804 阅读 · 8 评论 -
Mybites IN关键字
Mybites应用过程中我发现IN关键字后面如果加参数,此参数并不能用Set只能用List WHERE dk.kpi_id IN <foreach collection="list" open="(" separator="," close=")" index="index" item="val"> '${val}'原创 2018-10-08 17:41:42 · 129 阅读 · 0 评论 -
Java中synchronized的用法
看了资料,有必要自己总结一下,可以参考文章《编程思想之多线程与多进程系列(上)》Snchronized这个关键字涉及到锁的概念,所以要知道它的用法,我们首先应该了解锁的概念,然后再理解synchronized关键字的用法java内置锁:每个java对象都可以用作实现同步的锁,这样的锁被称为内置锁。线程在进入加锁代码块或者方法时会自动获得该锁。在退出该加锁对象的时候会自动释放该锁。要获得...原创 2018-10-09 15:45:02 · 145 阅读 · 0 评论 -
Java系统当前时间获取及格式化
以前获取系统当前时间都傻乎乎的用Date date = new Date();现在又遇到了,思考了一下这是一种很糟糕的做法,势必每次用到都要实例化一个对象。那么可否用其他的代替呢?当然有,用System.currentTimeMillis()下面做个格式化的示例:new SimpleDateFormat("yyyyMMddHHmmss").format(System.currentTimeM...原创 2018-09-13 18:59:40 · 799 阅读 · 0 评论