![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
JAVA道人
我宁愿做错,也不愿什么都不做.
展开
-
使用testng进行单元测试
使用testng进行单元测试pom.xml <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>RELEASE</version> <scope>test</scope></dependency>test里面import org.t原创 2021-12-24 16:28:30 · 431 阅读 · 0 评论 -
JNDI-Injection-Exploit
JNDI-Injection-Exploit工具比marshalsec要好用的多,相当于把http服务器和协议服务器放在了一起github地址https://github.com/welk1n/JNDI-Injection-Exploit.git可以下载其release下的安装包$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]其中:-C - 远程class文件中要执行的命令。原创 2021-12-12 20:03:19 · 3743 阅读 · 0 评论 -
log4j2远程代码执行漏洞复现
从漏洞曝出,因为从来就没有了解过jndi,所以花了有一天时间才搞出。 以下是简单教程。1.pom.xml</dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupI.原创 2021-12-12 18:49:15 · 1588 阅读 · 3 评论 -
JNDI注入demo使用ldap方式
JNDI注入demoJNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。这些命名/目录服务提供者:RMI (JAVA远程方法调用)LDAP (轻量级目录访问协议)CORBA (公共对象请求代理体系结构)DNS (域名服务)大致说下原理,JNDI可以获取远程类并在当前环境里面执行。 如果我们知道的某个程序某一处执行了JND原创 2021-12-12 18:32:26 · 1568 阅读 · 0 评论 -
JNDI注入demo使用rmi方式
JNDI注入demo大致说下原理,JNDI可以获取远程类并在当前环境里面执行。 如果我们知道的某个程序某一处执行了JNDI,那么我们编写一个恶意类让其访问获取,就可以做很多事情了。 当前demo使用的是rmi协议一。准备工作1.编写一个恶意类Muma.里面调用了calc,这个相当于调用了一个计算器。public class Muma { static { try { Runtime.getRuntime().exec("calc").waitFor(); } catch原创 2021-12-12 17:51:15 · 909 阅读 · 0 评论 -
Log4j2的使用demo
pom.xml<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId>原创 2021-12-11 23:55:00 · 384 阅读 · 0 评论 -
@Repeatable注解
有些人生来就注定可以悠闲地坐在河边,有些人会被闪电击中,有些人会音乐,有些人是艺术家,有些人是游泳健将,有些人懂纽扣,有些人懂莎士比亚,有些人是妈妈,有些人是舞者……而人又都是有多个身份的,可以同时是丈夫/儿子/职员…程序里,我们有时候需要给一个目标加上多个相同的注解.这就是需要用到@RepeatableRepeatable代表可以重复,但是是归属于一个数组.本例Person注解归属Persons数组@Retention(RetentionPolicy.RUNTIME)@Target(Eleme.原创 2021-06-21 11:03:54 · 589 阅读 · 0 评论 -
java排查cpu升高
提高cpu的程序,做个无限循环即可package bbb;public class Te { public static void main(String[] args) throws InterruptedException { for (;;) { System.out.println("================"); } }}运行top -c查看使用cpu最高的程序,是java -jar bbb.jar,记住PID4325[root@localhost ~原创 2021-04-29 20:05:38 · 161 阅读 · 0 评论 -
查找数组是否包含另一个数组,不是查询元素
不是查询是否包含元素的.是查询是否严格包含的.工具类代码如下private int indexOf(byte [] source, byte [] target) { //获取来源和目标长度 int sourceLen = source.length; int targetLen = target.length; if (sourceLen == 0 || targetLen == 0) { return -1; } if (sourceLen < targetLen)原创 2021-04-19 16:01:33 · 343 阅读 · 0 评论 -
4个byte转int
//0101 0010 0010 0100 0101 1011 0100 1101 byte[] bytes = {82,36,91,77}; int int1 = ByteBuffer.wrap(bytes).getInt(); System.out.println(int1);原创 2020-12-24 13:38:04 · 1855 阅读 · 0 评论 -
jms规范
定义:jms是java message service (JAVA消息服务)的规范,相当于jdbc。有一整套的接口。元素:jms元素由以下构成:jms提供者:消息中间件,比如activemqjms客户:连接消息中间件的客户端jms生产者:发送消息的客户jms消费者:接收消息的客户jms消息:消息载体对象jms队列:一旦被消费立即移出,因ack回复快慢,所以不严格按照顺序。jms主题:订阅主题接口:ConnnectFactory:连接工厂Connecti原创 2020-07-04 13:53:15 · 200 阅读 · 0 评论 -
双重for循环的优化
demo如下:public class TestM { public static void main(String[] args) { for (int i = 0; i <15 ; i++) { aaa();//630 //bbb();//600 } } private static void aaa() { long s = System.currentTime.原创 2020-05-20 18:06:51 · 2036 阅读 · 1 评论 -
PrintStream发生block现象
大概长得都如下:"http-nio-38080-exec-32" #106 daemon prio=5 os_prio=0 tid=0x0000000025def800 nid=0x3164 waiting for monitor entry [0x000000003534a000] java.lang.Thread.State: BLOCKED (on object mon...原创 2020-05-02 13:41:41 · 828 阅读 · 0 评论 -
为什么不要用System.out.println()
这行代码什么都没有做,它只是把一些语句打印到了控制台.其中system.out获得了系统控制台的唯一输出流.PrintStream而PrintStream的println()里是这样:public void println(boolean x) { synchronized (this) { print(x); newL...原创 2020-05-02 13:35:47 · 3079 阅读 · 0 评论 -
JAVA 强转呀强转
通常我们遇到的强转,最为常见的是:long a = 1L;int b = (int) a;这种基本类型的强转会损失一定精度。那么非基本数据类型能否强转吗?当然也可以,比如下面两个类。class User{}class BigUser extends User{ boolean big;}我们测试一番,使用main方法调用test方法:void...原创 2020-05-02 10:10:52 · 287 阅读 · 0 评论 -
java8 LocalDateTime
public static void main(String[] args) { System.out.println(LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE)); System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("y...原创 2020-04-29 18:20:50 · 184 阅读 · 0 评论 -
java的lock
/** * 同一个lock,同一把锁 */ Lock lock = new ReentrantLock(); /** * * 串行执行,相当于syn */ public void aaa() { lock.lock(); try { Thread.sleep(3000); } catch (InterruptedException e) { /...原创 2019-10-18 22:23:56 · 189 阅读 · 2 评论 -
TreeSet的compare
compare这个对于Tree非常重要。它就是来定位元素的,只有compare = 0代表着同一元素。如果你compare 要么=1要么=-1,那么插入操作将永远不会覆盖,但因此你也无法做到remove(obj),因为treeset也根本找不到obj,它无法找到obj.compare = 0的元素。...原创 2019-10-15 23:04:28 · 848 阅读 · 0 评论 -
JDK动态代理
各方面的知识来源都在说,jdk动态代理要求类要有接口。实际上跟类没关系,jdk动态代理代理的就是接口。最为典型的就是mybatis,我们可以看到Mapper接口明明没有实现方法,而实际上却走向了数据库操作,那么它就是对接口进行代理,增强了功能,不止增强了一点点,因为以前是接口根本就没有实现功能。jdk动态代理的核心类就是Proxy.接下来看个示例:1.接口类public inte...原创 2019-10-12 22:50:37 · 144 阅读 · 0 评论 -
System.load(String filename)和System.loadLibrary(String libname)的区别
作用:它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。其实JDK提供给用户了两个方法用于载入文件,一个是System.load(String filename)方法,另外一个是System.loadLibrary(String libname)方法。System.loadSystem.load...原创 2018-08-07 10:56:11 · 296 阅读 · 0 评论 -
tomcat部署新代码不起作用
配置类如下,我将标题最小长度改成了2,然后把这个配置类替换到云服务器tomcat里,发现配置不起作用.public class Consts{ public static final int TITLE_LENGTH_MIN= 5;//标题长度最小 public static final int TITLE_LENGTH_MAX = 20 ;//标题长度最大}做了...原创 2019-07-02 16:50:10 · 239 阅读 · 0 评论 -
java.io.tmpdir究竟是哪里?
在ehcache里的磁盘路径默认就是java.io.tmpdir,那这究竟是哪里呢?其实你可以这样做:System.out.println(System.getProperty("java.io.tmpdir"));那么windows的结果大概就是这里:C:\Users\Administrator\AppData\Local\Templinux的结果是/tmp...原创 2019-07-02 16:21:47 · 348 阅读 · 0 评论 -
synchronized和spring事务之间的冲突
转自开源中国:https://my.oschina.net/u/3777556/blog/3011167大年初二,朋友问了我一个技术的问题(朋友实在是好学,佩服!)该问题来源知乎(synchronized锁问题):https://www.zhihu.com/question/277812143开启10000个线程,每个线程给员工表的money字段【初始值是0】加1,没有使用悲观锁和...原创 2019-07-02 16:51:10 · 220 阅读 · 0 评论 -
读写文件时,怎么设置编码格式
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"));) { bw.write(....); } catch (IOException e) { e.printStackTrace(); }以上是写,读的时候一样,...原创 2019-07-02 16:45:24 · 424 阅读 · 0 评论 -
jdk的一种xml解析实现
该方法有弊端,该方法是一次性读取,如果xml文件很大的话会造成内存溢出private static void test() { // TODO Auto-generated method stub // 创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newIns...原创 2019-07-02 16:50:21 · 113 阅读 · 0 评论 -
java的ROBOT
Java提供操作键盘和鼠标的API,在java.awt.*包中,官方API参见此处,下面是个简单的例子: package com.yeetrack.robot; import javax.imageio.ImageIO; import java.awt.*; import java.awt.event.InputEvent; import java.a...原创 2019-07-02 16:20:16 · 143 阅读 · 0 评论 -
@JSONField的一些使用基础
@JSONField介绍fastjson是阿里巴巴出品的快速解析json的一个工具,@JSONField就是里面为数不多的注解之一.也是最为重要的注解.它的内容如下:/* * Copyright 1999-2017 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License")...原创 2019-06-26 18:42:15 · 5313 阅读 · 2 评论 -
lambda表达式在java中的应用
lambda算是一个不标准的语法糖。它实际上和你想做的事情过程不一样,但是结果是相同的,这一点通过反编译即可知道。本章只阐述lambda在匿名内部类时的使用,至于在遍历时的使用则不多赘述。匿名内部类可以进行抽象。1.如果只做一件事情的话就可以这样写,下面相当于是new Runnable()new Thread(() -> System.out.println(1));...原创 2019-06-27 23:25:42 · 399 阅读 · 0 评论 -
Calender关于周需要注意的地方
在Calender里,如果你想要获取关于“周”的一些内容,不可避免地要清楚一点,那就是JAVA里面的周,取值范围只有1~53还需要使用两个设置它们分别是:calendar.setFirstDayOfWeek(Calendar.MONDAY);calendar.setMinimalDaysInFirstWeek(4);setFirstDayOfWeek()是指定哪一天...原创 2019-07-11 15:32:33 · 1072 阅读 · 1 评论 -
深入了解浮点精度(一,有趣的现象)
前言: 预期读者: 非程序科班出身,或对浮点精度只有少量了解的同学. 写作目的: 网上的教程很少有循序渐进的,作此文以弥补之。现象:先看一个现象吧: System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42); System.out.println(4...原创 2019-07-29 08:35:45 · 397 阅读 · 0 评论 -
java格式化json
new GsonBuilder().setPrettyPrinting().create().toJson(xxx)原创 2019-07-22 17:11:46 · 258 阅读 · 0 评论 -
深入了解浮点精度(二。浮点在计算机的存储)
上一章:深入了解浮点精度(一 。有趣的现象)二进制怎么表示浮点数?按照2进制,浮点数据可以这么算4.5 = 100.1有的同学可能会问了,100我明白,代表着4,那么小数点后面的那个1为什么能代表0.5?其实是这么算的,小数点后面的表达式是1/2^n小数点后面是1 ,那么2的1次方就是2,1/2 = 0.5了。那么反过来100.01就等于4.25,100.11的0...原创 2019-07-29 08:36:19 · 664 阅读 · 0 评论 -
深入了解浮点精度(三。浮点不准确)
上一章:深入了解浮点精度(二。浮点在计算机的存储)通过上章,我们知道,4.25的二进制是100.01,4.75 = 100.11。但仔细想想,就会觉得不对劲,浮点是不是只能表示1被2或2的倍数除的小数和呢?带着这个疑问,我们来拜访下4.1,这次我们和4.125以及4.0625一起来拜访012345678 12345678 12345678 12345670 1000...原创 2019-07-29 08:36:12 · 1453 阅读 · 0 评论 -
深入了解浮点精度(四。严格精度的浮点运算)
上一章:深入了解浮点精度(三。浮点不准确)如果你不严谨要求的话,浮点类型自身的运算可以满足一些基本的需要,但对于财务问题恐怕就不行了。为什么呢?比如说double 100 = 99.999999999998那么在购买的时候,一个商品卖了100元,你支付完成后,发现只支付了99.9999999998,这样恐怕就会引起一系列判断紊乱了。如果严格控制浮点类型的精度呢?答案就是...原创 2019-07-29 08:36:05 · 1111 阅读 · 0 评论 -
深入了解浮点精度(五,小于1的浮点存储)
上一章:深入了解浮点精度(四。严格精度的浮点运算)我们在第二章里提到了一个观点是:所有的浮点数都可以表示为1.xxxx *2^N,x只能表示0和1这个观点是正确的吗?对于大于一 的浮点来说,完全没问题,比如4.5 = 100.1 = 1.001 * 2^2但如果是小于1呢?例如:0.5额,额,额~~然后就郁闷了,发现怎么着也转变不成1.xxxx *2^...原创 2019-07-29 08:35:59 · 923 阅读 · 0 评论 -
File.renameTo方法
该方法底层是native方法,最底层会调用当前操作系统的重命名方法。该方法使用于从一个文件系统到另一个文件系统时,可能不会成功。该方法不是原子性的。该方法可能在面对一个确切的path的时候可能会一直不成功。所以你需要严格判断该方法的返回值。java.io.Files有着针对各平台的移动及重命名的方法。看下效率:public static void main(St...原创 2019-06-28 13:11:01 · 318 阅读 · 0 评论 -
一个根据当前经纬度求"附近的人/商品"的工具类
声明:1.该工具类是基本胚子,没有所谓设计模式.但可以完美使用2.该工具类附带有web监听器,供持久化存储3.速度超快代码:public class LatData implements Serializable,Comparable<LatData>{ /** * */ private static final long serialVersion...原创 2019-06-28 13:09:31 · 107 阅读 · 0 评论 -
TreeSet不能持久化
不能使用匿名内部类形式的comparetor.宜元素实现compareable原创 2019-06-28 13:09:40 · 83 阅读 · 0 评论 -
java并发:Executors可以创建的三个线程池
Executors.newSingleThreadExecutor();创建一个单线程池,里面维护了一个队列.如果在执行过程中出现异常而终止.那么下个任务将会创建一个新的线程.Executors.newCachedThreadPool();创建一个无边界线程池.如果线程不够,那么会新建一个线程.如果有线程闲置了60秒.那么会被销毁.Executors.newFixedThreadP...原创 2019-07-02 16:27:52 · 141 阅读 · 0 评论 -
销毁线程
tomcat关闭时,自己创建的线程该怎么销毁?1.在servlet 或filter里的destroy()方法里主动销毁。2.把开启的线程设置为守护线程也可以销毁。运行中 的线程如何销毁?比如线程里面while(true)了1.线程正常运行完即可。2.抛出异常。这个最棒。3.某些情况下可以使用return关键字;4.不要用stop(),这玩意是过时的方法,有弊端,比如会把...原创 2019-07-02 16:30:19 · 298 阅读 · 0 评论