
Java
文章平均质量分 62
主要积累平时用到的java知识,希望可以帮到你。
码莎拉蒂 .
这个作者很懒,什么都没留下…
展开
-
windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。
我想把资源文件先加密成压缩文件,然后同时创建每个加密压缩文件同名的文件夹,同时需要把这个加密文件拷贝到这个同名的文件夹,然后还需要把一个图片和一个文本文档同时放进这个文件夹,然后在不加密压缩这个文件夹,上次这个资源到百度网盘。原创 2021-12-01 00:20:23 · 4131 阅读 · 19 评论 -
Java之对List里面的对象名字进行模糊查询
1 问题对list里面的对象名字进行模糊查询2 解决办法 //即可以进行模糊匹配 matcher.find() //匹配查询 matcher.matches() /** * 模糊查询 */ public static ArrayList<SearchBean> searc...原创 2020-04-29 21:13:50 · 5438 阅读 · 2 评论 -
Java之synchronized可重入性的理解
1 synchronized可重入性的理解当一个线程试图操作一个由其他线程持有的对象锁的临界资源时,将会处于阻塞状态,但当一个线程再次请求自己持有对象锁的临界资源时,如果当前锁是重入性,会请求将会成功,如果当前锁不是可重入性,会等待当前对象锁的释放,实际上该对象锁已被当前线程所持有,不可能再次获得,就会产生死锁,在java中synchronized是基于原子性的内部锁机制,是可重入的,因此在...原创 2020-01-03 00:36:29 · 4421 阅读 · 0 评论 -
Java之synchronized的JVM底层实现原理精简理解
1synchronized的JVM底层原理实现的精简理解Java 虚拟机中的synchronized基于进入和退出Monitor对象(也称为管程或监视器锁)实现, 无论是显式同步(synchronized作用在同步代码块,有明确的 monitorenter 和 monitorexit 指令) 还是隐式同步(synchronized作用在方法区,调用指令ACC_SYNCHRONIZED 标志...原创 2019-12-31 22:31:01 · 3158 阅读 · 0 评论 -
Java之volatile如何保证可见性和指令重排序
1 我们先了解CPU缓存CPU缓存为了解决CPU运算速度与内存读写速度不匹配的问题,因为CPU运算速度要比内存读写速度快得多一次主内存的访问通常在几十到几百个时钟周期 一次L1高速缓存的读写只需要1~2个时钟周期 一次L2高速缓存的读写也只需要数十个时钟周期CPU大多数情况下读写都不会直接访问内存,取而代之的是CPU缓存,CPU缓存是位于CPU与内存之间的临时存储器(简单理解为寄存器...原创 2019-12-25 02:09:23 · 3000 阅读 · 0 评论 -
Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别
一、 HashMap1)底层实现数组+链表+红黑树(在JDK1.8中如果链表长度大于8的时候才转换为红黑树)2)是否线程安全不支持线程的同步,线程不安全,如需同步,可用Collections的synchronizedMap方法或者使用ConcurrentHashMap,调用这个对象的方法使HashMap具有同步的能力。3)插入值操作过程 public synchroni...原创 2019-12-21 02:55:19 · 2849 阅读 · 0 评论 -
Java之通过Collections.synchronizedMap创建线程安全的HashMap
1 问题我们知道hashMap线程是不安全的,一般而言,我们怎么创建线程安全的HashMap呢?2 解决办法我们可以使用Collections.synchronizedMap来创建HashMap,如下static Map<String, String> results = Collections.synchronizedMap(new HashMap...原创 2019-12-21 01:33:12 · 3383 阅读 · 0 评论 -
Java之ThreadPoolExcutor和四种常见的线程池
一、ThreadPoolExcutors的作用java提供了ThreadPoolExcutors来创建一个线程池,我们为什么要用线程池呢?1.降低资源的消耗:通过重复利用已经创建好的线程降低线程的创建和销毁带来的损耗2.提高响应速度:因为线程池中的线程处于等待分配任务的状态,当任务来时无需创建新的线程就能执行3.提高线程的可管理性二、ThreadPoolExecuto...原创 2019-12-05 04:02:51 · 5381 阅读 · 0 评论 -
Java之GC机制
1JVM基本结构1)类加载器classLoader:在JVM启动时或者类运行时将需要的.class文件加载到内存中2)内存区域(运行时数据区): 是在JVM运行的时候操作所分配的内存区3)执行引擎:负责执行class文件中包含的字节码指令4)本地方法接口:主要是调用C/C++实现的本地方法及返回结果2JVM内存结构1 ) 方法区:用于...原创 2019-12-02 02:19:51 · 2862 阅读 · 0 评论 -
Java之解决散列表的冲突用开放定址法和链表法
1 问题理想状态下,散列表就是一个包含关键字的固定大小的数组,通过使用散列函数,将关键字映射到数组的不同位置,哈希函数可以将关键字均匀的分散到数组的不同位置,不会出现两个关键字散列值相同(假设关键字数量小于数组的大小)的情况。但是在实际使用中,经常会出现多个关键字散列值相同的情况(被映射到数组的同一个位置),我们将这种情况称为散列冲突。为了解决散列冲突,主要采用下如下两种方式:...原创 2019-12-01 04:32:30 · 3430 阅读 · 0 评论 -
Java之jdk和CGLib实现动态代理
1jdk实现动态代理源码实现这里需要用到InvocationHandler接口public interface Hello { public void sayHello();}public class HelloImpl implements Hello { @Override public void sayHello() { Syst...原创 2019-11-28 03:39:52 · 2873 阅读 · 0 评论 -
Java线程安全以及线程安全的实现方式和内存模型(JMM)
一、了解几个概念1)临界区:临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用2)互斥量:互斥量是一个可以处于两态之一的变量:解锁和加锁。这样,只需要一个二进制位表示它...原创 2019-11-26 02:00:37 · 2918 阅读 · 0 评论 -
Java之ThreadLocal
1ThreadLocal接口出现原因使用ThreadLocal保存当前线程的变量值,这样你想获取该变量的值的时候,获取到的都是本线程的变量值,不会获取到其他线程设置的值,早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序2 接口主...原创 2019-11-26 01:29:42 · 2699 阅读 · 0 评论 -
Java之多线程里面的锁理解以及synchronized与Lock的区别
一、宏观的说下锁的分类1)锁分为乐观锁、悲观锁悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题。乐观锁则认为对于同一个数据的并发操作,是不会发生修改的。在更新数据的时候,会采用尝试更新,不断重新的方式更新数据。乐观的认为,不加锁的并发操作是没有事情的2)锁分...原创 2019-11-25 02:11:57 · 2918 阅读 · 0 评论 -
Java之Callable和Runnable
1 接口定义1) Callable接口public interface Callable<V> { V call() throws Exception;}2) Runnable接口public interface Runnable { public abstract void run();}2 不同点和相同点1)相同点都...原创 2019-11-14 23:38:31 · 2914 阅读 · 0 评论 -
Java之new一个对象简单过程
1 问题new一个对象简单过程2 过程1)类加载过程(第一次使用该类) 先看这个类有没有加载到内存,没有的话下面操作 (1)、加载:类加载器(双亲委派模式)通过全限名读取类的二进制流到jvm内部,存储在运行时内存的方法中,java堆中生成一个代表该类的java.lang.Class对象,作为方法区数据的访问入口 (2)、验证:比如f...原创 2019-11-12 01:19:24 · 7163 阅读 · 2 评论 -
NetBeans安装提示neatbeans cannot find java 1.8 or higher
1 问题安装NetBeans的时候,点击bin目录下的netbeans64.exe,然后提示错误neatbeans cannot find java 1.8 or higher然后我在终端输入java -version是1.8C:\Users\User>java -versionjava version "1.8.0_65"Java(TM) SE Runtime...原创 2019-03-22 23:31:28 · 7995 阅读 · 5 评论 -
Java之TimeUnit
1、TimeUnit介绍位于这个包下import java.util.concurrent.TimeUnit;2、使用一般比如多少分钟转多少毫秒、多少秒转多少毫秒、多少小时转多少分钟,还可以使用线程休息的方法, 底层还是用Thread.sleep()实现,代码可读性好点,我们可以使用这个封装好的类。TimeUnit.SECONDS.sleep(...原创 2018-07-25 00:57:15 · 5955 阅读 · 0 评论 -
java之wait()、notify()实现非阻塞的生产者和消费者
一、对于wait()和notify()的解释 void notify() Wakes up a single thread that is waiting on this object’s monitor. 唤醒等待获取锁资源的单个线程 void notifyAll() Wakes up all threads that are waiting on thi...原创 2018-07-03 21:08:18 · 2946 阅读 · 0 评论 -
java之Synchronized(锁住对象和锁住代码)
1、问题Synchronized我们一般都知道是锁,但是我们怎么区分是锁对象还是锁代码呢?2、测试Demopackage leetcode.chenyu.test;public class Synchronized { class Test { public synchronized void testFirst() { print("testFirst"); } ...原创 2018-06-11 02:12:42 · 16781 阅读 · 0 评论 -
java之通过FileChannel实现文件复制
1、FileChanel介绍Java NIO FileChannel是连接文件的通道,从文件中读取数据和将数据写入文件。Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。FileInputStream的getChannel方法获取的文件通道是只读的,当然通过FileOutputStream的getChannel的方法获取的文件通道是可写的部分A...原创 2018-06-10 22:22:59 · 4234 阅读 · 2 评论 -
java之写接口回调编程经验改进
1、问题在一个类里面数据的变化需要在另外一个类里面动态得到,比如在我的异步任务里面下载的数据,需要在UI界面的ProgressDialog里面动态显示,我们需要在异步任务里面写个接口,然后接口里面有一些函数,至于在ProgressDialog显示的时候,我们只需要重写接口,然后传递到异步任务里面去就行,一般在传递到异步任务里面去我们可以通过构造方法传递或者,set一个接口进去。2、一般实现办法这里...原创 2018-06-10 17:53:38 · 2283 阅读 · 0 评论 -
java之DocumentBuilderFactory解析xml
1、About documentBuilderFactory API description1)、 javax.xml.parsers 包DocumentBuilderFactory创建DOM模式的解析器对象, DocumentBuilderFactory是抽象工厂类,不能直接实例化,但是有newInstance方法2)、DocumentBuilderFactory.newInstance() 得...原创 2018-06-01 22:36:13 · 16365 阅读 · 2 评论 -
java之异常java.net.MalformedURLException解决办法
1、问题日志打印 System.err W java.net.MalformedURLException W at java.net.URL.<init>(URL.java:152) W at java.net.URL.<init&g...原创 2018-05-07 20:46:25 · 77866 阅读 · 98 评论 -
java和C++之单例类双重检查加锁
1、Javapublic class Singleton { private volatile static Singleton instance; public static Singleton getInstance () { if (instance == null) { synchronized (Singleton.class)原创 2017-10-25 01:16:32 · 2470 阅读 · 0 评论 -
java之用反射实现方法(已知实体对象和实体参数)
1、问题有个函数需要在Android 23(6.0)以上,但是我们的API是22,所以这个实体对象调用不了这个函数,这个时候我们应该想到的是反射,切记。2、实现同时看我写得很着急,因为我是先class.forName("***"),然后再去getMethod("**"),然后method.invoke("**");我们可以快速这样写Met原创 2017-10-10 22:00:11 · 3535 阅读 · 0 评论 -
java之RSA和Base64加密帮助类
1、RSAUtils.java类package com.sangfor.vpn.client.service.utils;import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; imp原创 2017-07-24 20:01:33 · 3497 阅读 · 0 评论 -
java之ThreadLocal简单使用总结
1、介绍ThreadLocal看安卓源码的时候,在这个类Looper.java ,会有这个一句函数static final ThreadLocal sThreadLocal = new ThreadLocal();一开始我不是很懂ThreadLocal.java这个类,简单理解ThreadLocal 就是把变量分成很多个拷贝,每个线程拥有一个,比如说一个变量使用ThreadLoca原创 2017-07-22 17:16:06 · 2633 阅读 · 0 评论 -
Eclipse之如何快速查看抽象函数实现
1、ctrl + (open implementation)2、ctrl + T原创 2017-06-10 21:06:20 · 5668 阅读 · 0 评论 -
java之MessageDigest简单使用总结
1、说明MessageDigest是Java自带的类2、简单代码比如我们需要实现md5,或者sha加密public class MD5AndSHA { public final static String MD5_SHA(String s, String method) { char hexDigits[] =原创 2017-04-20 21:39:11 · 12559 阅读 · 1 评论 -
java之简单的Callback使用总结
1、什么是Callback,什么时候需要使用Callbackcallback是回调的意思,一般我们需要2个类需要相互掉用,一个类把数据动态传递给另外一个类的时候,可以用这种方式,比如Android里面的Launcher类和LauncherModel类,LauncherModel里面有接口很多没有实现的方法,Launcher实现LauncherModel的接口,实现方法,传递数据给Launche原创 2017-04-12 01:14:34 · 6177 阅读 · 0 评论 -
Bit Manipulation —— 位运算
1、介绍Bit Manipulation(位运算):一共五种运算:与,或,异或,左移,右移。2、算法题目一般使用总结:(1)n & (n-1)能够消灭n中最右侧的一个1。(2) 右移:除以2, 左移:乘以2。(3)异或性质:a1^a2^a3 = a2^a3^a1 交换律,0^a=a, a^a=0。原创 2017-03-30 01:17:03 · 2915 阅读 · 0 评论 -
java之解析DNS的SRV记录
1、导入相应的jar包 导入sjava-2.1.6.jar包,今天上传资源有问题,下次传了之后再补充到这里。2、关键代码 public static List resoveSrv(String query) {// String s = "ramuh.example.com"; // the inputted string, I need原创 2017-02-28 11:23:15 · 3946 阅读 · 0 评论 -
为什么越来越多的开发者选择使用Spring Boot
Web应用开发背景使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架,库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的生态系统,这也是许多公司采用Java作为主流的语言进行服务器端开发的原因,也是为什么Java一直保持着非常活跃的用户群。最受Java开发者喜好的框架当属spring,Sp转载 2017-02-05 17:24:13 · 7162 阅读 · 0 评论 -
java之socket的OOBInline和UrgentData和发送心跳包研究
UrgentData可以理解为紧急发送数据方式,如果我们客户端先用write方法写入数据,再用UrgentData发送数据,再去执行flush操作,我们可以得到服务端先打印UrgentData发送的数据,然后再打印write写入的数据。客户端代码实现:package com.chenyu.string.cn;import java.io.IOException;import java原创 2016-11-30 20:43:34 · 6253 阅读 · 4 评论 -
java反射异常之java.lang.NoSuchFieldException: school
今天调用下面的代码的时候 Field schoolField = studentClass.getField("school"); schoolField.setAccessible(true); schoolField.set(null, "中南林科大"); System.out.print("school:" + student.getSchool());爆出java.原创 2016-11-24 13:14:44 · 16653 阅读 · 5 评论 -
JavaJVM之ClassLoader源码分析
层次结构和类图ClassLoader层次结构: UML类图: sun.misc.Launcher.ExtClassLoader sun.misc.Launcher.AppClassLoader 显式加载类在代码中显式加载某个类,有三种方法:this.getClass().getClassLoader().loadClass()C转载 2016-11-21 00:14:17 · 2766 阅读 · 0 评论 -
Android插件化开发基础之Java类加载器与双亲委派模型
类加载器加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。虚拟机规范并没有指明二进制字节流要从一个Class文件获取转载 2016-11-20 23:48:04 · 4728 阅读 · 0 评论 -
Android插件化开发基础之Java动态代理(proxy)机制的简单例子
一、代码package com.sangfor.tree;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface ProxyInterFace { public void proxyMethod();原创 2016-11-16 12:02:11 · 4666 阅读 · 4 评论 -
java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。
java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。声明以下是 java.io.File.setExecutable(boolean executable) 方法的声明:public boolean setExecutable(boolean executable)参数exe转载 2016-09-13 22:43:48 · 6980 阅读 · 0 评论