JDK

idea如何导入一个maven项目

岁酱吖の 提交于 2020-09-30 16:49:14
1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok,next,勾选快照 7.点击next,next 8.没设置jdk,此处需要配置,已配置,略过这步 点击+,选择jdk,所在路径,点击next, 9.点击Finish即可 到此结束! 来源: oschina 链接: https://my.oschina.net/u/4361024/blog/4525309

面试大厂必问的ForkJoin框架剖析【建议收藏】

旧街凉风 提交于 2020-09-30 16:16:19
点关注,不迷路!如果本文对你有帮助的话不要忘记点赞支持哦! 概述 image.png 和传统的线程池使用 AQS 的实现逻辑不同, ForkJoin 引入全新的结构来标识: ForkJoinPool: 用于执行 ForkJoinTask 任务的执行池,不再是传统执行池 Worker+Queue 的组合模式,而是维护了一个队列数组 WorkQueue ,这样在提交任务和线程任务的时候大幅度的减少碰撞。 WorkQueue: 双向列表,用于任务的有序执行,如果 WorkQueue 用于自己的执行线程 Thread ,线程默认将会从top端选取任务用来执行 - LIFO。因为只有owner的Thread才能从top端取任务,所以在设置变量时, int top; 不需要使用 volatile 。 ForkJoinWorkThread: 用于执行任务的线程,用于区别使用非ForkJoinWorkThread线程提交的task;启动一个该Thread,会自动注册一个WorkQueue到Pool, 这里规定,拥有Thread的WorkQueue只能出现在WorkQueue数组的奇数位 ForkJoinTask: 任务, 它比传统的任务更加轻量,不再对是 RUNNABLE 的子类,提供 fork / join 方法用于分割任务以及聚合结果。 为了充分施展并行运算,该框架实现了复杂的 worker

Java I/O不迷茫,一文为你导航!

江枫思渺然 提交于 2020-09-30 16:15:01
https://mp.weixin.qq.com/s/tqD72l9j6k3ch28PPBb6jQ Java I/O不迷茫,一文为你导航! 前言:在之前的面试中,每每问到关于Java I/O 方面的东西都感觉自己吃了大亏..所以这里抢救一下..来深入的了解一下在Java之中的 I/O 到底是怎么回事..文章可能说明类的文字有点儿多,希望能耐心读完.. 什么是 I/O? 学习过计算机相关课程的童鞋应该都知道,I/O 即输入Input/ 输出Output的缩写,最容易让人联想到的就是屏幕这样的输出设备以及键盘鼠标这一类的输入设备, 其广义上的定义就是:数据在内部存储器和外部存储器或其他周边设备之间的输入和输出; 我们可以从定义上看到问题的核心就是: 数据/ 输入/ 输出 ,在Java中,主要就是涉及到磁盘 I/O 和网络 I/O 两种了; 简单理解Java 流(Stream) 通常我们说 I/O 都会涉及到诸如输入流、输出流这样的概念,那么什么是流呢?流是一个抽象但形象的概念,你可以简单理解成 一个数据的序列 ,输入流表示从一个源读取数据,输出流则表示向一个目标写数据,在Java程序中,对于数据的输入和输出都是采用 “流” 这样的方式进行的,其设备可以是文件、网络、内存等; 流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备

CentOS 7 搭建 groovy环境

泄露秘密 提交于 2020-09-30 07:38:01
简介 Groovy是一种功能强大,可选类型和动态 语言,支持Java平台。旨在提高开发人员的生产力得益于简洁,熟悉且简单易学的语法。可以与任何Java程序顺利集成,并立即为您的应用程序提供强大的功能,包括脚本编写功能,特定领域语言编写,运行时和编译时元编程以及函数式编程。 安装环境 1.CentOS 7 系统 2.可连接外网 3.已下载jdk软件包 安装步骤 一、安装jdk 1.1下载解压软件包 tar xvf jdk-8u221-linux-x64.tar.gz -C /usr/local cd /usr/local mv jdk-8u221 java 1.2 设置环境变量 sed -i '$aJAVA_HOME=/usr/local/java\nCLASSPATH=$JAVA_HOME/lib\nPATH=$PATH:$JAVA_HOME/bin\nexport PATH JAVA_HOME CLASSPATH' /etc/profile source /etc/profile java -version 二、下载groovy 2.1 官网下载 地址 https://groovy.apache.org/download.html 2.2 解压软件包 cd /usr/local unzip apache-groovy-sdk-3.0.5.zip 2.3 设置环境变量 export

Ghidra逆向工具入门与应用

核能气质少年 提交于 2020-09-30 02:46:19
逆向工程中涉及到多种多样的工具(例如IDA Pro,Angr等),熟练使用这些工具可以化繁为简,使得程序分析工作得以顺利开展。本文介绍众多逆向工具中的一种——Ghidra,它是由美国国家安全局(NSA,National Security Agency)的研究理事会为 NSA 的网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞。Ghidra跟IDA Pro用起来很像,但Ghidra是免费的,而且是开源的! Ghidra支持多种操作系统,例如Windows, Linux,或者MacOS。本文中的示例主要在Windows下完成(其他平台上也是类似的,因为本文不是一蹴而就的,后面某些截图是在Ubuntu上做的,但这没有多大影响)。你可以从【1】中下载Ghidra,它是一个压缩包,解压到你指定的目录后,即可开始使用了。 注意:Ghidra的运行需要有Java环境作为支持,所以请确保电脑上已经正确安装并配置好了JRE和JDK 。 现在打开Windows的命令行程序,切换到Ghidra的安装目录,并输入ghidraRun,程序就被启动了,如下图所示: 开始使用Ghidra 在File菜单中选择新建一个项目(如下图所示),然后在弹出的对话框中选择“Non-Shared Project”,并按【Next>>

【JVM系列5】深入分析Java垃圾收集算法和常用垃圾收集器

别说谁变了你拦得住时间么 提交于 2020-09-30 01:46:40
深入分析Java垃圾收集算法和垃圾收集器 前言 如何确定无效对象 引用计数法(Reference Counting) 可达性分析算法(Reachability Analysis) GC Root 引用的分类 强引用(Strong Reference) 软引用(Soft Reference) 弱引用(Weak Reference) 虚引用(Phantom Reference) 垃圾收集算法 标记-清除(Mark-Sweep)算法 标记-清除算法的缺点 复制(Copying)算法 复制算法的缺点 复制算法在Java虚拟机的落地形式 标记-整理(Mark-Compact)算法 分代收集算法(Generational Collection) 垃圾收集器 Serial和Serial Old收集器 ParNew收集器 Parallel Scavenge收集器 Paralled Old收集器 CMS(Concurrent Mark Sweep)收集器 CMS优缺点 Floating Garbage(浮动垃圾) Concurrent Mode Failure(并发模式失败) G1(Garbage-First)收集器 G1特点 G1工作流程 G1应用场景 其他收集器 如何选择垃圾回收器 总结 前言 上一篇 我们介绍了对象在堆内的内存布局已经占用空间的大小,同时分析了堆内可以分为Young区和Old区

你真的理解Java 字符串的不可变性吗?

回眸只為那壹抹淺笑 提交于 2020-09-29 21:41:49
一、背景 字符串的不可变性可以说是面试中的一个常见的“简单的” 问题。 常见的回答如: 字符串创建后不可改变。 字符串的不可变性是指字符串的字符不可变。 String 的 value 字符数组声明为 final 保证不可变。 真的是这样吗? 下面我们再思考两个问题: 那么字符串的不可变究竟是指什么? 是如何保证的呢? 下面看一个奇怪的现象:在程序一段程序的最后执行下面的语句居然打印了 “aw” 为什么? // 前面代码省略 System . out . println ( "ab" ) ; 建议大家先思考,然后再看下文。 二、案例 你认为下面的示例代码的输出结果是啥? import java . lang . reflect . Field ; public class Test { public static void main ( String [ ] args ) throws NoSuchFieldException , IllegalAccessException { String str = "ab" ; System . out . println ( "str=" + str ) ; Class stringClass = str . getClass ( ) ; Field field = stringClass . getDeclaredField (

当IntelliJ IDEA2020.1遇上JDK14:所有美好环环相扣

给你一囗甜甜゛ 提交于 2020-09-29 18:17:07
来源: https://blog.csdn.net/weixin_43413658/article/details/105839472 IntelliJ IDEA新功能: 界面支持中文 但这里要注意的是不是原生支持中文,而是要安装jetbrains的官方插件, 如下图 导航栏改进 上面的导航栏可以直接跳转到各个方法,这个以前要实现的话要点左侧的Structure ,现在就方便多了 支持Javadoc的渲染 以前Javadoc看起来很费劲,要手动转换html格式,现在看起来就很方便了,还可以更改字体大小 以前 现在 新增主题和字体 主题: 字体: Lightedit模式 你可以把idea当成编辑器 Zen模式 进入了蝉模式,世界瞬间变得清爽了很多,让你专注于写代码 在IDEA里安装JDK 支持Java 14新特性 instanceof用法增强 record新语法支持 命令行终端支持分栏 更加智能的检查和重构 支持就地更改方法签名 智能分析日期字符串格式 更加智能的检查和重构 支持数据流分析辅助,可以直接预测下面的运行结果 调试时,支持对象字段的置顶 以文件形式存储运行配置 更加先进的版本控制 优化了代码提交的窗口 支持搜索,刷新本地及远端的代码分支 Maven和Gradle导入更新 增强的HTTP Client 更多精彩: 记一次由Redis分布式锁造成的重大事故,避免以后踩坑! 6

浅谈BIO、NIO、AIO,一些感悟

假如想象 提交于 2020-09-29 16:39:33
用了io这么久,有没有真正的理解了,比如BIO、NIO、AIO是什么,能够在什么场景用到? BIO是同步阻塞IO,就是传统io,处理方式简单,一次只能读取一个字节流,并发能力低。同步非阻塞,就是咱们干一件事情,比如排队买面包,在买面包的过程中,不能做其他的事情,买完之后才能离开。可以使用在并发要求不高的服务中,但程序简单直观。 NIO是同步非阻塞io,是传统io的升级,客户端和服务端通过Channel通讯,实现了多路复用的情况。同步非阻塞,就是咱们干一件事情,比如排队买面包,在买面包的过程中,通过买票等待,等待的过程中还可以干其他的事情,但是不能离开买面包的地方。可以应用在聊天服务器,多个线程并发短连接的场景,成熟框架netty,使用netty框架解决了jdk的nio空轮询的问题. AIO是异步非阻塞io,是NIO的升级,也叫NIO2,异步的io操作是基于事件和回调机制,可以使用在多线程长连接的创建,比如相册服务器,服务段了,会有一个长连接不断轮询,进行信息同步。 来源: oschina 链接: https://my.oschina.net/u/4412708/blog/4557599

Java面试中的核心问题—高并发多线程,跳槽涨薪全靠它了!

烈酒焚心 提交于 2020-09-29 13:56:23
今天来和大家讨论一下并发多线程方面的知识,像死锁啊,生命周期啊,线程池啊,可重用啊都有涉及,希望对大家有所帮助。 前言: 身为一个博客博主,最近逛了一下圈子,发现好多大佬都在分享并发多线程方面的技术。今天咱也跟一下风,写一篇关于并发多线程方面的文章,本篇文章由浅入深,主要是让大家能够清楚的认识他们,希望对大家有所帮助,有什么意见或建议大家评论区里见。 另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,下方只是部分截图 想要资料的话也可以点击 795983544 领取 暗号CSDN。 1.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。 2.线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。每个线程都拥有单独的栈内存用来存储本地数据。 3.如何在Java中实现线程? 两种方式:java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行