![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 编程语言
文章平均质量分 51
Turn X7
不息!
展开
-
动态代理,UndeclaredThrowableException异常
最近学习,遇见UndeclaredThrowableException异常,记录一下。转载 2022-12-01 10:28:34 · 335 阅读 · 0 评论 -
在java程序中动态设置java.library.path
最近在做一个项目的过程中需要用到第三方的jar包和动态链接库(dll),其中jar包可以直接引入,问题是在开发的时候dll可以放在System32下,但是当项目完成后build的时候,这种方式就行不通了,所以必须考虑其他的方式来引用所需的dll文件。我们知道,在VM参数处通过-Djava.library.path后将加载路径指定到自己的lib目录后,程序可以正常启动。但这种方式显然不够灵活,受限于必须从main函数启动,并且要手动的去指定虚拟机参数。那么我们现在就需要采取其他的方式,比如在项目的根目录下建一转载 2022-07-13 14:02:46 · 3155 阅读 · 0 评论 -
将BigInteger转换为二进制字符串
String s1 = "0011111111101111111111111100101101111100110000001011111000010100";String s2 = "0011111111100000110011001100110011001100110011001100110011001100"; BigInteger bi1, bi2, bi3;bi1 = new BigInteger(s1,2);bi2 = new BigInteger(s2,2);bi3 = bi1.转载 2022-05-10 00:06:07 · 621 阅读 · 0 评论 -
使用BigInteger.setBit与BigInteger.testBit来实现权限控制
今天看到一个项目使用了BigInteger.setBit与BigInteger.testBit来实现权限控制,觉得很有趣,mark一下首先,列出一下这两个方法的解释:1.testBit方法的解释:boolean java.math.BigInteger.testBit(int n)Returns true if and only if the designated bit is set. (Computes ((this & (1<<n)) != 0).)Parame转载 2022-05-10 00:03:05 · 235 阅读 · 0 评论 -
top+jstack分析cpu过高原因
1、用ps -ef | grep 进程名 查出进程运行的进程id2、查看进程cpu占用情况:top -p 241083、用top -Hp pid 查询进程下所有线程的运行情况(shift+p 按cpu排序,shift+m 按内存排序)top -Hp 241083、找到cpu最高的pid,用printf ‘%x\n’ pid 转换为16进制printf ‘%x\n’ 244394、用jstack 进程id | grep 16进制线程id 找到线程信息jstack 2410...原创 2021-12-14 11:39:03 · 825 阅读 · 0 评论 -
java直接调用并执行sql脚本
1、背景:项目本身功能简单,不想使用开源框架引入过多不需要的依赖,避免程序部署时,人工忘记执行sql脚本文件问题2、此demo为使用mybatis中脚本执行工具类org.apache.ibatis.jdbc.ScriptRunner实现3、使用者如果需要,则将其demo中所用到的相关java文件整合到你的实际项目中即可4、使用说明:项目启动时自动初始化该项目所用到的数据库表及相关字段(表存在时不再创建,字段存在时不再创建); 通过java代码实现sql脚本文件的执行,进行数据库表初始化操作,消除原创 2021-10-28 18:31:52 · 2713 阅读 · 0 评论 -
jfinal与swagger整合
1、背景:jboot依赖jar包过多(并非实际项目所需),仅想将其swagger使用方式集成到实际项目中2、此demo为阅读jboot使用swagger方式,通过将其jboot中的相关源代码抽离实现3、使用者如果需要,则将其demo中所用到的相关java文件整合到你的实际jfinal实际项目中即可运行效果图:.........原创 2021-10-28 16:15:55 · 459 阅读 · 0 评论 -
nginx代理获取ip为127.0.0.1解决方法
原因我们访问互联网上的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理,反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略。这样在服务端拿到的客户端IP将是反向代理IP,而不是真实客户端IP,因此需要想办法来获取到真实客户端IP。获取真实ip配置 在nginx的配置文件中的location下添加proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;pr..转载 2021-08-10 19:56:58 · 3924 阅读 · 0 评论 -
使用maven打包可执行程序时 pom文件中配置
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </incl.原创 2021-06-22 15:30:45 · 319 阅读 · 0 评论 -
模拟mybatis解析mapper文件中的sql语句为可执行语句
package xuliang.module.common.Utils;import lombok.extern.slf4j.Slf4j;import ognl.DefaultClassResolver;import ognl.MemberAccess;import ognl.Ognl;import ognl.OgnlException;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXR.原创 2021-05-13 21:41:53 · 609 阅读 · 0 评论 -
log4j2.xml文件配置样例
<?xml version="1.0" encoding="UTF-8"?><Configuration status="OFF"> <Appenders> <RollingFile name="RollingFile"> <FileName>../logs/xuliang.log</FileName> <FilePattern>../logs/x.原创 2021-05-13 21:22:34 · 204 阅读 · 0 评论 -
使用表驱动方式优化if-else
优化前代码public class Test{ public static void main(String[] args) { if...else 过多的代码可以抽象为下面这段代码。其中只列出3个逻辑分支,但实际工作中,能见到一个方法包含10个、20个甚至更多的逻辑分支的情况。 String str = "rrrrrr678679"; if(str.contains("qqqqqq")) { doAc原创 2021-04-14 13:38:58 · 815 阅读 · 0 评论 -
mybatis源码-mapper文件中if语法分析
之前仿照mybatis写了一个sql语句与代码解耦的工具类,最一开始的设想是,应用程序能加载xml文件中的sql语句,并能对sql语句的形参赋值,完成sql的正确执行即可,但是这样不具有扩展性。回想sql语句与代码耦合的场景,会有通过分支判断进行sql拼接的情况,所以今天又把mybatis的代码扒拉了一番,学学人家的if语法怎么实现正确解析的。前提;自己搭好mybatis源代码环境(源码地址:https://github.com/mybatis/mybatis-3.git 下载下来导入idea即..原创 2021-04-11 23:02:41 · 1778 阅读 · 1 评论 -
日期时间换算
字符串类型日期换算成毫秒数:String dateStr = "20201105182535";SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");//24小时制long callTime = simpleDateFormat.parse(callTimeStr).getTime() / 1000;毫秒级时间转换成指定格式日期Date beginDate = new Date(1604658原创 2020-11-07 13:31:19 · 631 阅读 · 0 评论 -
JDK动态代理-ProxyGenerator生成代理类的字节码文件解析
我们知道代理类是通过Proxy类的ProxyClassFactory工厂生成的,这个工厂类会去调用ProxyGenerator类的generateProxyClass()方法来生成代理类的字节码。ProxyGenerator这个类存放在sun.misc包下,我们可以通过OpenJDK源码来找到这个类,该类的generateProxyClass()静态方法的核心内容就是去调用generateClassFile()实例方法来生成Class文件。我们直接来看generateClassFile()这个方法内部做了些转载 2020-08-30 02:01:26 · 1676 阅读 · 0 评论 -
Java如何将给定的字符串转成Class对象
给定一个定义类的字符串,比如“package com.teasp.compile; public class Test{ public static void main(String[] args){System.out.println(\"compile test.\");} }”,怎么将其转换成Class对象呢?下面的代码可以实现该功能:package com.turnx7.DynamicProxy;import javax.tools.*;import java.lang.reflect.转载 2020-08-30 01:57:43 · 8947 阅读 · 0 评论 -
java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier)
-闭锁(Latch)闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个闭锁的状态就失效了,门的状态也就不能变了,只能是打开状态。也就是说闭锁的状态是一次性的,它确保在闭锁打开之前所有特定的活动都需要在闭锁打开之后才能完成。应用场景:确保某个计算在其需要的所有资源都被初始化之后才继续执行。二元闭锁(包括两....转载 2020-08-24 01:05:56 · 745 阅读 · 0 评论 -
Java多线程 Concurrent并发包——Semaphore(停车场问题)
Semaphore 信号量位于java.lang.concurrent包下——计数器大于0 表示可以使用的资源数量 小于等于0不可使用——可用于设置多个并发量,例如限制10个访问——acquire 获取release 释放比Lock更进一步 可以控制多个线程同时访问关键区实例演示:抢车位10辆车同时到达停车场,但是只有5个车位,模拟多辆车停车,开走等流程采用信号量表示资源数目,多线程并发抢占资源private final Semaphore placeSema...转载 2020-08-24 00:50:58 · 505 阅读 · 0 评论 -
HashMap多线程put后get为null和多线程put的时候可能导致元素丢失
一、多线程put后get为null 源码定位void transfer(Entry[] newTable) { Entry[] src = table; int newCapacity = newTable.length; for ( int j = 0 ; j < src.length; j++) { Entry e = src[j]; if (e != null ) { src[转载 2020-08-24 00:00:31 · 2438 阅读 · 0 评论 -
Hadoop 日常学习bug调试(一)
(1)下载文件(方法一):代码如下:package hdfs;import org.apache.commons.io.IOUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.i原创 2020-06-25 19:57:47 · 641 阅读 · 0 评论 -
Linux环境下安装jdk
1上传alt+p 后出现sftp窗口,然后put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz 2 解压jdk #创建文件夹 mkdir /home/hadoop/app #解压 tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app ...原创 2020-01-11 00:45:01 · 140 阅读 · 0 评论 -
net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx
在操作json的数据格式的时候,如果没有指明数据类型,那么只能是基本类型或者是String类型,不能出现复杂数据类型。for(Map<String, Object> map : datas){ String gw_id = map.get("GW_ID").toString(); gw_id = gw_id.substring(......转载 2019-10-21 00:26:34 · 791 阅读 · 0 评论 -
java中的static方法可以被重写吗?(从方法调用过程理解)
原贴:https://blog.csdn.net/m0_37974032/article/details/81157433答案是:不可以。首先明确一点,在子类中重写父类的static方法,是不会报错的,编译也可以通过,但是在通过一个声明为父类,实际类型为子类的引用变量调用该方法时,发现被调用的仍是父类中原本以为会被覆盖的方法,不具有“多态”特性。描述有点绕,看下面的例子:父类Hero:......原创 2019-06-22 14:37:50 · 4727 阅读 · 1 评论 -
java中break的使用
原贴:https://blog.csdn.net/ethan_10/article/details/79070107break适用范围:只能用于switch或者是循环语句中。break作用:1. break用于switch语句的作用是结束一个switch语句。2. break用于循环语句中的作用是结束当前所在的循环语句。笔试题目:break目前位于内层的for循环,如何才能让bre......转载 2019-06-22 13:48:00 · 17093 阅读 · 1 评论 -
String、StringBuffer、StringBuilder的区别
原贴:https://baijiahao.baidu.com/s?id=1629804867201303563&wfr=spider&for=pcString、StringBuffer、StringBuilder有什么区别?String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它......转载 2019-06-22 12:30:49 · 128 阅读 · 0 评论 -
Java中assert(断言)的使用
原文:https://blog.csdn.net/jeikerxiao/article/details/822624871.IDEA打开断言1.IDEA中默认assert(断言)是关闭,开启方式如下:简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐)。2.assert格式1.格式1assert [boolean 表达式]......转载 2019-06-22 12:21:02 · 6856 阅读 · 0 评论 -
Integer缓存池(IntegerCache)及整型缓存池
原贴:https://blog.csdn.net/maihilton/article/details/80101497Integer 缓存是 Java 5 中引入的一个有助于节省内存、提高性能的特性。Integer中有个静态内部类IntegerCache,里面有个cache[],也就是Integer常量池,常量池的大小为一个字节(-128~127)。JDK源码如下(摘自JDK1.8源码):......转载 2019-06-22 12:16:19 · 1924 阅读 · 0 评论 -
String类和常量池
原文:https://blog.csdn.net/kavito/article/details/82261135String类和常量池1、 String对象的两种创建方式: String str1 = "abcd"; String str2 = new String("abcd"); System.out.println(str1==str2);//false...转载 2019-06-22 12:14:15 · 107 阅读 · 0 评论