JAVA
Yonghua Li
苟活程序员
展开
-
利用Java实现后端文件跨服务器传输(上传图片等文件)
背景假设一台服务器部署了一个 Java 应用程序,需要将本机的数据文件(可能是文本也可能是图像)上传到远端的另外一台服务器,注意这个不是通过前端进行PUT请求来完成的,需要怎么做呢?实现需要上传的一方实现一个 FileIOService.java // 这里把图片的常用后缀采用列举的方式做了设置,可以换个其他更简单的图像判别方法 private static final String[] IMAGE_VALUES = new String[]{"jpg", "BMP", "bmp",原创 2021-01-11 21:02:50 · 10421 阅读 · 1 评论 -
Spring Boot 创建定时任务
Step 1: @EnableScheduling 使能 Application 主类@SpringBootApplication@EnableSchedulingpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApp...原创 2019-05-07 16:48:08 · 310 阅读 · 0 评论 -
Trie 树(字典树/前缀树)实现 Java
Trie 树:在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。(摘自 https://zh.wikip...原创 2018-11-15 17:08:06 · 852 阅读 · 1 评论 -
Java 并发编程艺术笔记
Thread.sleep() 和 Object.wait() 的区别: sleep是Thread类的方法,wait是Object类的方法 调用Thread.sleep()方法不会释放锁,而调用Object.wait()方法是会释放当前锁 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 sleep必须捕获异常,而wait...原创 2018-09-05 01:05:05 · 233 阅读 · 0 评论 -
Java 采集 Linux 网络带宽信息
通过 cat /proc/net/dev 和 ethtool [net] 两个信息,计算网络带宽、吞吐速率和带宽利用率。package demo;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Properties;...原创 2018-08-21 22:20:50 · 1738 阅读 · 0 评论 -
Java 守护线程
Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。守护线程的作用和特点:Daemon 作用是为其他线程提供便利服务,守护线程最典型的应用就是 GC (垃圾收集器)。只要当前 JVM 实例中尚存任何一个非守护线程没有结束,守护线程就全部工作; 只有当最后一个非守护线程结束是,守护线程随着 JVM 一同结束工作。守护线程的创建:...转载 2018-08-23 00:45:53 · 184 阅读 · 0 评论 -
Java final 和 static 关键字
final 关键字在Java 中,final 是有 “最后的,不再可变” 的意思,主要的作用有:修饰数据(局部变量或者成员变量),该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;修饰方法的参数,表示在变量的生命周期内不能被修改;修饰方法,被 final 修饰的方法不能被重写(注:类的private方法会隐式地被指定为final方法);...原创 2018-08-23 00:36:30 · 352 阅读 · 0 评论 -
(搬运 )Java抽象类与接口的区别
本文由 ImportNew - jessenpan 翻译自 javacodegeeks。 http://www.importnew.com/12399.html抽象类抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例: 被abstract修饰的类叫抽象类,抽...转载 2018-08-22 23:45:39 · 150 阅读 · 0 评论 -
Java 代理机制
本文纯属搬运,参考以下文章(侵删,请联系): Java代理机制与hook: http://www.zengye.cc/2016/05/01/java%E4%BB%A3%E7%90%86%E6%9C%BA%E5%88%B6%E4%B8%8Ehook/ Java三种代理模式:静态代理、动态代理和cglib代理: https://segmentfault.com/a/119...原创 2018-08-22 22:24:39 · 1075 阅读 · 0 评论 -
单例模式实现—考虑线程安全性
在设计模式中,最为常见常用的应该就是单例模式了。单例模式的使用场景:1.资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置。 2.控制资源的情况下,方便资源之间的互相通信。如线程池等。 单例模式要素:私有构造方法 私有静态成员变量,自身类型的实例以自己实例为返回值的公有静态方法单例模式常见的七种实现方式—— 1. 简单的懒...原创 2018-08-18 20:43:05 · 453 阅读 · 0 评论 -
Java 实现线程池
ThreadPool 接口 ThreadPool.javapackage ThreadPool;public interface ThreadPool<Job extends Runnable> { //执行一个Job,这个Job需要实现Runnable void execute(Job job); //关闭线程池 void shutd...原创 2018-07-28 22:22:39 · 203 阅读 · 0 评论 -
笔记ctype - Java 并发机制的底层实现原理
一、前言: 总结自《Java 并发编程的艺术》 如有雷同,纯属摘抄-.-首先,多线程并行执行不总是比串行执行快,因为存在线程创建和上下文切换的开销。所以在计算量较小的情况下,并发执行跟串行执行效率差不多,甚至有比串行慢的情况。 减少上下文切换的方法主要有:无锁并发编程、CAS算法、使用最少线程和使用协程。无锁并发编程: 多线程竞争锁时,会引起上下文切换,可以使用数据ID按H...翻译 2018-07-24 18:13:33 · 221 阅读 · 0 评论 -
Java 传值 or 传引用
因为之前没怎么用Java,一直没有搞清楚一个有趣的问题,Java 传参时,到底是传值还是传引用?! 直到在工作过程中看到一段代码public ThreadTask(..., ConcurrentMap<String, Map<String, Object>> result) { ... }我发现这个方法没有显式地返回 res...原创 2018-07-10 20:28:00 · 198 阅读 · 0 评论 -
JAVA 加载、执行 JVM 以及 JAVA反射的较为基础直观的快速理解
详见一篇比较好的博文,没有联系转载,只能手动跳转了:深入理解java反射机制 https://blog.csdn.net/u012585964/article/details/52011138转载 2018-05-12 23:23:21 · 240 阅读 · 0 评论 -
Java中的String、StringBuilder、StringBuffer的区别
String 字符串常量 线程安全 因为是常量,所以是线程安全的,当我们修改 String 的时候,其实是创建了一个新的 String 对象,当需要频繁修改字符串的时候,不建议使用 String 因为当 JAVA 虚拟机堆中创建多了无引用的 String 对象之后,JAVA 垃圾回收器(GC)就会开始运行,程序也会因此变慢。StringBuilder 字符串变量 非线程安全 StringB...原创 2018-05-12 23:17:22 · 142 阅读 · 0 评论 -
JAVA 中 equals()与hashcode()
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。equals()方法是用来判断其他的对象是否和该对象相等.equals()方法...原创 2018-05-18 12:55:27 · 159 阅读 · 0 评论