JDK

JAVA WEB 文件管理系统

青春壹個敷衍的年華 提交于 2020-08-20 06:05:51
@ 目录 软件环境 项目功能及框架图 项目ER图 项目功能模块截图 总结 声明: 技术交流,可联系博主(QQ:1841952224) 如果涉及版权,可联系博主删除,谢谢! 软件环境 操作系统:Windows 10 开发环境:IntelliJ IDEA 2018.3.1 + JDK 1.8.0_152 + Maven + SVN 数据库:MYSQL 5.7+ 软件技术框架:Spring Boot + Spring + SpringMVC + MyBatis + Bootstrap + Jquery + Vue + Maven 系统架构:微服务 开发环境不全的可以 点击此处 查找【Java 开发工具】 进行自由下载 项目功能及框架图 项目ER图 项目功能模块截图 总结 具有基本功能,可二次扩展。 项目下载 点击此处 来源: oschina 链接: https://my.oschina.net/u/4406166/blog/4335326

用vertx构建百万并发请求的超大型高可用系统

谁都会走 提交于 2020-08-20 05:13:19
需求: 百万并发连接,高可用 技术选型: centos7,jdk8,vertx3.7.0,mysql8 测试时间:2019年5月20日再次测试成功 成功实现来了百万并发连接访问的架构。 由于业务保密制度限制,只能说一下大概思路(如果有商业高并发的研发需求,可扫描文末二维码加作者微信): vertx 使得基于Java做高并发变得更加容易。 vertx Cluster 支持多台机器的集群。 即使不采用集群,不用nginx,zk,当使用多核高配的单个服务器时,vertx也能实现百万级别的高并发访问。假设你购买了一个16Core64G内存的云主机,你的业务类是MyDemoVerticle,那么为了充分利用每一个CPU,你可以这样部署: DeploymentOptions options = new DeploymentOptions().setInstances(16); vertx.deployVerticle("com.mycompany.MyVerticle", options); 这样系统会为每个实例分配一个eventLoop. Vertx自动支持高可用机制,如果你希望当服务死掉后能自动重启是,可以在部署命令中加上 -ha指令 vertx run my-verticle.js -ha -ha 意味着你的vertx自动运行在cluster模式下。如果需要配置集群细节,可以参考

最新版本marshalsec

感情迁移 提交于 2020-08-20 03:42:00
工具下载 marshalsec-0.3.0.3-SNAPSHOT-all.jar下载 下载地址: https://download.csdn.net/download/Fly_hps/12409277 工具使用 命令格式 marshalsec命令格式如下: java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]] 参数说明: -a:生成exploit下的所有payload(例如:hessian下的SpringPartiallyComparableAdvisorHolder, SpringAbstractBeanFactoryPointcutAdvisor, Rome, XBean, Resin) -t:对生成的payloads进行解码测试 -v:verbose mode, 展示生成的payloads gadget_type:指定使用的payload arguments - payload运行时使用的参数 marshalsec.<marshaller>:指定exploits,根目录下的java文件名 开启RMI服务 java -cp target/marshalsec-0.0.3-SNAPSHOT

JVM基础系列第4讲:从源代码到机器码,发生了什么?

筅森魡賤 提交于 2020-08-20 03:39:33
在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外。那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的。 如下图所示,编译器可以分为: 前端编译器、JIT 编译器和AOT编译器 。下面我们逐个讲解。 前端编译器:源代码到字节码 之前我们说到:对于 Java 虚拟机来说,其实际输入的是字节码文件,而不是 Java 文件。那么对于 Java 语言而言,其实怎么将 Java 代码转化成字节码文件的呢?我们知道在 JDK 的安装目录里有一个 javac 工具,就是它将 Java 代码翻译成字节码,这个工具我们叫做编译器。相对于后面要讲的其他编译器,其因为处于编译的前期,因此又被成为前端编译器。 通过 javac 编译器,我们可以很方便地将 java 源文件翻译成字节码文件。就拿我们最熟悉的 Hello World 作为例子: public class Demo{ public static void main(String args[]){ System.out.println("Hello World!"); } } 我们使用 javac 命令编译上面这个类,便会生成一个 Demo.class 文件: > javac Demo.java > ls Demo.java Demo.class 我们使用纯文本编辑器打开

JAVA new流程(实例化过程)

蓝咒 提交于 2020-08-20 01:04:34
1.首先去JVM 的方法区中区寻找类的class对象,如果能找到,则按照定义生成对象,找不到则转2 2.加载类定义:类加载器(classLoader)寻找该类的 .class文件,找到后对文件进行分析转换为class对象存入方法区方便以后调用。 其中jdk 的class一般是在jvm启动时用启动类加载器完成加载,用户的class则是在用到的时候再加载。 Java中ClassLoader的加载采用了双亲委托机制,采用双亲委托机制加载类的时候采用如下的几个步骤: 1. 当前ClassLoader首先从自己已经加载的类中查询是否此类已经加载,如果已经加载则直接返回原来已经加载的类。 每个类加载器都有自己的加载缓存,当一个类被加载了以后就会放入缓存,等下次加载的时候就可以直接返回了。 2. 当前classLoader的缓存中没有找到被加载的类的时候,委托父类加载器去加载,父类加载器采用同样的策略,首先查看自己的缓存,然后委托父类的父类去加载,一直到bootstrp ClassLoader. 3. 当所有的父类加载器都没有加载的时候,再由当前的类加载器加载,并将其放入它自己的缓存中,以便下次有加载请求的时候直接返回。 说到这里大家可能会想,Java为什么要采用这样的委托机制?理解这个问题,我们引入另外一个关于Classloader的概念“命名空间”, 它是指要确定某一个类

面试必备!就凭借着这份Java 高频面试题,我拿下了阿里,字节的offer!

。_饼干妹妹 提交于 2020-08-20 00:30:17
List 1. 为什么 arraylist 不安全? 我们查看源码发现 arraylist 的 CRUD 操作,并没有涉及到锁之类的东西。底层是数组,初始大小为 10。插入时会判断数组容量是否足够,不够的话会进行扩容。所谓扩容就是新建一个新的数组,然后将老的数据里面的元素复制到新的数组里面(所以增加较慢)。 2. CopyOnWriteArrayList 有什么特点? 它是 List 接口的一个实现类,在 java.util.concurrent(简称 JUC,后面我全部改成 juc,大家注意下)。 内部持有一个 ReentrantLock lock = new ReentrantLock(); 对于增删改操作都是先加锁再释放锁,线程安全。并且锁只有一把,而读操作不需要获得锁,支持并发。 读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给 array。 3. CopyOnWriteArrayList 与 Vector 的选择? Vector 是增删改查方法都加了 synchronized,保证同步,但是每个方法执行的时候都要去获得锁,性能就会大大下降,而 CopyOnWriteArrayList 只是在增删改上加锁,但是读不加锁,在读方面的性能就好于 Vector,CopyOnWriteArrayList 支持读多写少的并发情况。 Vector 和

ArrayList源码-不常用方法

自古美人都是妖i 提交于 2020-08-20 00:16:37
这篇笔记主要记录一些不常用方法,了解一下可以干什么,有个印象。 改变数组容量 /** * 将该<tt> ArrayList </ tt>实例的容量调整为列表的当前大小。 * 应用程序可以使用此操作来最大程度地减少<tt> ArrayList </ tt>实例的存储。 */ public void trimToSize () { modCount ++ ; if ( size < elementData . length ) { elementData = ( size == 0 ) ? EMPTY_ELEMENTDATA : Arrays. copyOf ( elementData , size ) ; } } /** * 如有必要,增加此<tt> ArrayList </ tt>实例的容量,以确保它至少可以容纳最小容量参数指定的元素数。 * * @param minCapacity the desired minimum capacity */ public void ensureCapacity ( int minCapacity) { int minExpand = ( elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA ) // any size if not default element table ? 0 //

99 道 Java 多线程面试题,看完我跪了!

老子叫甜甜 提交于 2020-08-19 23:56:45
今天给大家更新的是一篇关于多线程面试的文章,是根据时下热门的面试内容给大家进行总结的,如有雷同,请多见谅。 本篇文章属于干货内容!请各位读者朋友一定要坚持读到最后,完整阅读本文后相信你对多线程会有不一样感悟,下次面试和面试官也能杠一杠相关内容了。 1.什么是进程? 进程是系统中正在运行的一个程序,程序一旦运行就是进程。 进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。 2.什么是线程? 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 3.线程的实现方式? 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future 4.Thread 类中的start() 和 run() 方法有什么区别? 1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。然后通过此Thread类调用方法run(

JDK10的新特性:var和匿名类如何运用?正确的案例讲解

佐手、 提交于 2020-08-19 23:33:03
具体的有关lambda表达式和匿名类的介绍,大家可以查阅我之前写的文章。这里就不多讲了。 本文主要介绍var和匿名类之间的一些平时没有注意到的问题。 更多内容请访问 www.flydean.com 匿名类中自定义变量 我们看一个经常使用的Runnable匿名类: Runnable runnable = new Runnable() { String className=Thread.currentThread().getName(); [@Override](https://my.oschina.net/u/1162528) public void run() { log.info("inside runnable"); } }; 和平常使用的Runable不一样的是,我们为匿名类添加了一个变量叫做className。 因为Runnable接口并没有定义如何去访问这个新创建的className字段,所以使用runnable.className是会编译错误的。 但是如果我们将Runnable替换成为var: var runnable = new Runnable() { String className=Thread.currentThread().getName(); [@Override](https://my.oschina.net/u/1162528) public void

Java 9 揭秘(4. 模块依赖)

北慕城南 提交于 2020-08-19 20:37:30
文 by / 林本托 Tips 做一个终身学习的人。 在此章节中,主要学习以下内容: 如何声明模块依赖 模块的隐式可读性意味着什么以及如何声明它 限定导出(exports)与非限定导出之间的差异 声明模块的运行时可选依赖关系 如何打开整个模块或其选定的软件包进行深层反射 JDK 9中的访问类型 跨模块分割包 模块声明的约束 不同类型的模块:命名,未命名,显式,自动,普通和开放的模块 如何使用javap工具来解析模块的定义 一. 声明模块依赖 假设你现在已经有两个模块,分别是: com.jdojo.address:包含Address类 com.jdojo.person:包含Person类。 其中,com.jdojo.person模块想使用com.jdojo.address模块下的Address类,其模块图如下所示: 在NetBeans中,可以创建两个名为com.jdojo.address和com.jdojo.person的Java项目。 每个项目将包含与项目名称相同的模块的代码。下面包含了com.jdojo.address的模块声明和Address类的代码。 // module-info.java module com.jdojo.address { // Export the com.jdojo.address package exports com.jdojo.address;