
Java基础
文章平均质量分 57
SJZYLC
这个作者很懒,什么都没留下…
展开
-
并发(1)并发的多面性
并发解决的问题大体上可以分为速度、设计可管理性两种。原创 2022-08-22 07:41:55 · 138 阅读 · 0 评论 -
JDK的安装及配置
Linux系统在Oracle官网下载二进制安装包,例如jdk-8uversion-linux-x64.tar.gz。 进入JDK安装包所在目录。 执行以下命令解压安装包:tar zxvf jdk-8uversion-linux-x64.tar.gz按以下方式配置环境变量。执行以下命令打开配置文件。vim ~/.bashrc在配置文件中添加以下内容。JAVA_HOME=/Java安装路径CLASSPATH=$JAVA_HOME/lib/PATH=$PATH:$JAVA_H原创 2022-03-16 07:39:46 · 653 阅读 · 0 评论 -
fastjson重复引用问题及解决办法
fastjson在进行序列化的时候,如果属性是同一个引用,会进行压缩,通过一些语法引用其他的json块,下面举例说明。Product类是最外层的类,BaseInfo和BaseInfoChild是Product类的两个属性的类型,其中BaseInfoChild是BaseInfo的子类。public class BaseInfo { private Long id; private String name; public Long getId() { retu原创 2021-12-30 21:53:55 · 2891 阅读 · 1 评论 -
jvm监控
jvm监控的思路:通过定时拉取jvm的信息,然后收集起来,图表展示数据。jvm指标的获取:jvm指标获取 获取线程数 ManagementFactory.getThreadMXBean().getThreadCount() 非堆内存使用 ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage().getUsed() 非堆内存初始化 ..原创 2021-02-08 15:52:44 · 286 阅读 · 0 评论 -
BigDecimal使用过程中的问题记录
使用不当记录,不涉及原理性的分析。使用BigDecimal进行小数乘除运算,出来的结果不及预期。public static void test(){ BigDecimal oneHundred = new BigDecimal(100); BigDecimal percent = BigDecimal.valueOf(15.00); BigDecimal num1 = new BigDecimal(36.90).setScale(2, BigDeci原创 2021-02-06 07:39:54 · 292 阅读 · 2 评论 -
jdk7中新增的文件操作Files
读取文件很繁琐,需要用到输入流,自从jdk7中新增了Files类后,很多操作都很简单。读取一个文件的内容: try { byte[] bytes = Files.readAllBytes(Paths.get(new File("F://test.txt").toURI())); String content = new String(bytes); System.out.println(content);原创 2020-10-10 23:24:09 · 374 阅读 · 0 评论 -
【零基础编写计算器窗体程序】20200422逻辑判断与循环
【零基础编写计算器窗体程序】20200422逻辑判断与循环 逻辑判断 程序执行过程会有不同的情况,会根据分支判断结果进入不同的代码块。分支判断主要是if...else...语句举个例子:int num1 = 10;int num2 = 32;if(num1>num2){ System.out.println("num1比较大");}else{...原创 2020-04-22 21:05:00 · 436 阅读 · 0 评论 -
【零基础编写计算器窗体程序】20200422常用类型及基本运算
20200422常用类型及基本运算 HelloWorld程序解析 public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); }}这是一个Java类,public是类可被访问范围的修饰符,public表示此类可被...原创 2020-04-22 20:44:47 · 286 阅读 · 0 评论 -
【零基础编写计算器窗体程序】安装配置JDK,并且第一个java程序
安装配置JDK,并且第一个java程序JDK是java运行环境和开发工具,要想开发和运行java程序,第一步要先安装JDK。 下载JDK 搜索引擎(百度)搜索“java”关键字,在展示的结果中,找到java官网下载地址注意:oracle是java的官方开发公司,从oracle站点下载的java是最正版的。我这里打开的地址:https://www.oracle.com/ja...原创 2020-04-19 15:36:22 · 364 阅读 · 0 评论 -
jdk8特性-提取对象列表中的某个属性列表
List<属性值类型> 属性List = 对象List.stream().map(对象::get方法()).collect(Collectors.toList());例如:List<Integer> idList = list.stream().map(User::getId).collect(Collectors.toList());List<In...原创 2020-03-17 22:48:15 · 3754 阅读 · 0 评论 -
Orika导致的一次jvm OOM
Orika是一个不错的Bean拷贝工具,可以将类的不同属性做映射进行拷贝。比如A对象的price和B对象的fee都表示价格,类型也都一样,只是字段名称不一样,这样通过映射可以方便的进行拷贝。下面是个示例:Source类:public class Source{ private Integer id; private Double price; public ...原创 2019-12-21 09:20:40 · 1741 阅读 · 0 评论 -
ThreadPoolExecutor-可暂停的线程池
ThreadPoolExecutor可以通过子类实现一些扩展功能。protected void beforeExecute(Thread t, Runnable r);protected void afterExecute(Runnable r, Throwable t);这两个方法是在execute方法中执行线程前后执行。子类可以实现这两个方法,对线程池进行扩展。对beforeE...原创 2019-08-20 12:46:14 · 3107 阅读 · 0 评论 -
ThreadPoolExecutor-RejectedExecutionException报拒绝执行怎么办?
写个简单使用:Task类、MyThreadFactory类参见:https://blog.youkuaiyun.com/SJZYLC/article/details/98099977private static void simple(){ ThreadFactory namedThreadFactory = new MyThreadFactory(); int qu...原创 2019-08-20 11:35:33 · 3417 阅读 · 1 评论 -
ThreadPoolExecutor的corePoolSize和maximumPoolSize
ThreadPoolExecutor 将根据 corePoolSize(参见 getCorePoolSize())和 maximumPoolSize(参见 getMaximumPoolSize())设置的边界自动调整池大小。当新任务在方法 execute(java.lang.Runnable) 中提交时,如果运行的线程少于 corePoolSize,则创建新线程来处理请求,即使其他辅助线程是空闲的...原创 2019-08-19 21:26:53 · 2029 阅读 · 0 评论 -
ThreadPoolExecutor-线程池如何从队列里面取线程?
线程池执行线程调用方法是ThreadPoolExecutor.execute(Runnable command)。查看execute的源码:public void execute(Runnable command) { if (command == null) throw new NullPointerException(); int c = ctl.ge...原创 2019-08-19 21:01:28 · 4621 阅读 · 3 评论 -
ThreadPoolExecutor简单使用示例
概述在编程规范中,不建议使用Executors去创建线程池,而是推荐使用ThreadPoolExecutor。ThreadPoolExecutor会更明确运行规则,避免资源耗尽的风险。因为Executors返回线程池有弊端:1)FixedThreadPool和SingleThreadPool,允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,...原创 2019-08-01 20:29:56 · 4529 阅读 · 0 评论 -
MySQLSyntaxErrorException: Query was empty解决思路
最近的一个项目,本地环境启动正常,上到线上就报错:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.refl...原创 2019-06-25 15:35:31 · 5908 阅读 · 0 评论 -
Map.keySet 和 Map.entrySet 的效率问题
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class Test { public static void main(String[] args) { Map map = new HashMap();原创 2015-07-29 16:29:47 · 1999 阅读 · 0 评论 -
跨国项目要注意时区问题
时间需要准确,应该传年月日时分秒,如“2018-01-01 10:10:10”,而不是传毫秒数。因为把毫秒数转成Date类型需要使用构造方法Date(long date),而构造的时候是根据当地的时区转换的,如果传的是北京时间,那么在泰国曼谷时区的机器上转换会成为“2018-01-01 09:10:10”,少一个小时,因为差一个时区。原创 2018-01-15 17:15:45 · 2484 阅读 · 0 评论 -
ArrayList线程不安全测试
在jdk的介绍中,ArrayList是线程不安全的,指的是多线程情况下会有多个线程同时访问这个对象,导致数据达不到预期。以下是一个示例:public classArrayListUnsyncTest {private static Listlist=newArrayList();public static voidmain(Strin原创 2018-01-25 20:12:02 · 597 阅读 · 0 评论 -
Thread.currentThread().getContextClassLoader()
Thread线程API中,getContextClassLoader()方法的描述为:* Returns the context ClassLoader for this Thread. The context* ClassLoader is provided by the creator of the thread for use* by code running in this t...原创 2018-07-24 11:09:43 · 10755 阅读 · 2 评论 -
总结对象属性拷贝的方法及效率比较(一)
针对不同类型的对象,但有相同名称的属性,对象属性拷贝方法:1)org.apache.commons.beanutils.BeanUtils属性拷贝的本质使用反射。2)org.springframework.beans.BeanUtils属性拷贝本质使用反射。3)自己写的反射进行对象复制。4)直接使用get、set方法复制。5)cglib的BeanCopier。 效率对比...原创 2018-07-25 15:02:18 · 3315 阅读 · 0 评论 -
总结对象属性拷贝的方法及效率比较(一)代码
public class HotelCtrip { private int hotelId; private String hotelName; private Room room; public HotelCtrip(){} public HotelCtrip(int hotelId, String hotelName, Room room){ ...原创 2018-07-25 15:14:04 · 671 阅读 · 0 评论 -
比Spring的BeanUtils.copyProperties还快的对象属性拷贝工具
关于对象属性拷贝,虽说有现成的工具可用,之前都是自己写的反射进行拷贝,效率比较后,发现效率不高。自从看了spring的源码,决定优化一下自定义的拷贝工具,主要是吸收spring的优秀思想,即使用内存作为缓存,同样的一个class拷贝时不用每次都进行反射,这样大大提升了效率。话不多说,直接上源码:class MethodObj{ private String name; ...原创 2018-07-30 14:32:34 · 2305 阅读 · 0 评论 -
Java内部类总结
目录一、内部类介绍二、内部类的几种形式2.1、成员内部类2.2、局部内部类2.3、嵌套内部类2.4、匿名内部类2.5、内部类的继承三、参考一、内部类介绍类表示的是行为,对象表示的数据。把一个类的定义放在另一个类的内部,这个类就叫内部类。是一种代码隐藏机制。内部类拥有外部类所有成员的访问权限。二、内部类的几种形式2.1、成员内部类在外部类里...原创 2019-04-11 09:40:58 · 230 阅读 · 0 评论 -
Tomcat部署程序避免jsp木马攻击
JSP的本质是servlet,当外面攻击者将jsp文件上传到程序目录下,就能通过访问jsp文件进行服务攻击,可以通过程序避免jsp文件上传。如果jsp文件已经上传上去,可以避免jsp文件被直接访问,思路是通过servlet对*.jsp、*.jspx文件进行过滤,核心代码如下:Servlet文件:Object flag = request.getAttribute("org.apach...原创 2019-04-07 19:47:14 · 2698 阅读 · 0 评论 -
java模拟键盘、鼠标按键打开QQ
Robot r = new Robot(); System.out.println("按windows键"); Thread.sleep(2000L); r.keyPress(KeyEvent.VK_WINDOWS); r.keyRelease(KeyEvent.VK_WINDOWS); System.out.println("鼠标移动"); ...原创 2019-04-09 21:46:55 · 798 阅读 · 0 评论 -
java程序jvm监控思路
定时任务定时采集jvm参数打印到日志文件,对日志文件进行异步读取。统计分析读取的日志。获取youngGC和fullGC的对象List<GarbageCollectorMXBean> gcList = ManagementFactory.getGarbageCollectorMXBeans(); if (gcList != null && !gc...原创 2019-04-15 14:47:06 · 534 阅读 · 0 评论 -
sun.misc.GC设置GC频率
public class GcTest { public static void main(String[] args) { try { Class<?> clazz = Class.forName("sun.misc.GC"); Method requestLatency = clazz.getMethod("...原创 2019-04-19 15:40:03 · 736 阅读 · 0 评论 -
swing切换控件后,鼠标滑过才会显示问题
swing控件切换后,需要鼠标滑过才会显示。被切换控件展示后this.validate();this.repaint();原创 2019-04-20 11:38:47 · 1667 阅读 · 0 评论 -
测试java的ArrayList与LinkedList的性能
测试java的ArrayList与LinkedList的性能原创 2015-04-13 19:02:36 · 670 阅读 · 0 评论