IntelliJ IDEA

高级java必须清楚的概念:原子性、可见性、有序性

房东的猫 提交于 2020-08-09 12:18:48
原子性、可见性、有序性是多线程编程中最重要的几个知识点,由于多线程情况复杂,如何让每个线程能看到正确的结果,这是非常重要的。 原子性 原子性是指一个线程的操作是不能被其他线程打断,同一时间只有一个线程对一个变量进行操作。在多线程情况下,每个线程的执行结果不受其他线程的干扰,比如说多个线程同时对同一个共享成员变量n++100次,如果n初始值为0,n最后的值应该是100,所以说它们是互不干扰的,这就是传说的中的原子性。但n++并不是原子性的操作,要使用AtomicInteger保证原子性。 可见性 可见性是指某个线程修改了某一个共享变量的值,而其他线程是否可以看见该共享变量修改后的值。在单线程中肯定不会有这种问题,单线程读到的肯定都是最新的值,而在多线程编程中就不一定了。 每个线程都有自己的工作内存,线程先把共享变量的值从主内存读到工作内存,形成一个副本,当计算完后再把副本的值刷回主内存,从读取到最后刷回主内存这是一个过程,当还没刷回主内存的时候这时候对其他线程是不可见的,所以其他线程从主内存读到的值是修改之前的旧值。 像CPU的缓存优化、硬件优化、指令重排及对JVM编译器的优化,都会出现可见性的问题。 有序性 我们都知道程序是按代码顺序执行的,对于单线程来说确实是如此,但在多线程情况下就不是如此了。为了优化程序执行和提高CPU的处理性能,JVM和操作系统都会对指令进行重排

Idea rest client 使用(全) 真香

纵然是瞬间 提交于 2020-08-09 11:47:51
看了网上好多的 idea rest client 讲解,大多都只是讲了它如何如何好,都只是简单的测了一个 json 的接口而已,个人实践了一把,里面还是有挺多坑的,但不得不说,那个脚本化处理请求的功能确实挺棒。 脚本化配置确实很方便,linux 使用文件来配置环境变量代替了windows 的可视化配置,sublime 使用文件来配置它的所有配置项取代传统的可视化配置,这种文件化的方式可以做到可迁移,多端即时同步和多人共享,有过经历的人自然懂我在说什么。 本文内容: 关于脚本化 mock 的实践,免复制 token 实践,文件传输实践 关于语法 请求的语法基本上和 http 协议内容是一致的,结构如下 ### 使用三个 # 来分隔多个请求 GET/POST 请求地址(可拼接查询参数) 请求头键值对 请求体 > {% %} # 响应处理 > 打头和 shell 很像,然后用 {% %} 括起来的脚本内容 ,在脚本中可以使用 javascript 原生语法,这就很强大了 # 脚本中有几个内置对象 client 表示当前客户端,response 表示响应结果 对于这个使用文档,我在官网没有找到对应的文档位置,但在 idea 本身提供了一些不错的使用示例,它的位置在 Tools/HTTP Client/Open HTTP Requests Collection 每发送一个请求后

屌炸天,JDK8的排序大法!!

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-09 11:45:17
今天总结了下JDK中排序的方法,包括JDK8中强大的lambda表达式及函数式接口运用,不废话,请看下面示例。 public class Test { public static void main(String\[\] args) { List<User> list = initList(); // jdk8之前的排序 Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getAge().compareTo(o2.getAge()); } }); // jdk8 lambda排序,带参数类型 list = initList(); list.sort((User u1, User u2) -> u1.getAge().compareTo(u2.getAge())); list.forEach(System.out::println); System.out.println(); // jdk8 lambda排序,不带参数类型 list = initList(); list.sort((u1, u2) -> u1.getAge().compareTo(u2.getAge())); list.forEach(System

超详细Maven技术应用指南

∥☆過路亽.° 提交于 2020-08-09 11:23:05
该文章, GitHub 已收录,欢迎老板们前来Star! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual 搜索关注微信公众号“码出Offer”,送你学习福利资源! 一、前言 在我们的项目资源中,你会发现需要导入的jar包越来越多,让jar包的管理越来越沉重。它会表现为以下几个缺点: 每个项目都需要手动搜集和导入所需要的jar包 项目中用到的jar包有版本更新,我们需要重新搜集并导入到项目中 相同的jar包导入到不同的项目中,jar包会在本地存储多份 针对上述问题,我们就需要使用统一的管理工具:Maven 二、了解Maven 2.1 什么是Maven Maven是一个基于项目对象模型(POM)的概念的纯Java开发的开源的项目管理工具。主要用来管理Java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分模块开发,提高开发效率。 2.2 Maven的下载安装 关于Maven的下载,我们需要下载它的解压包。 Maven下载地址: https://us.mirrors.quenda.co/apache/maven/maven-3/3.6.3/binaries/ image-20200616171323409 下载后将Maven解压到目录中就可以了! 注意:

深入浅出 Java 类加载机制!

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-09 11:10:46
类加载器 简单讲,类加载器ClassLoader的功能就是负责将class文件加载到jvm内存。 类加载器分类 从虚拟机层面讲分为两大类型的类加载器,一是Bootstrap Classloader即启动类加载器(C++实现),它是虚拟机的一部分,二是其他类型类加载器(JAVA实现),在虚拟机外部,并全部继承ClassLoader类。 从细分的角度讲会分为以下三类类加载器: 1、Bootsrap ClassLoader 启动类加载器,完全由jvm控制加载,外面访问不到这个类加载器,即不能被java程序引用。它主要负责加载jvm自身的工作类,即java/lib目录和-Xbootclasspath参数指定的目录的类库。 2、Extension ClassLoader 扩展类加载器,由java实现,即ExtClassLoader实现类。它主要负责加载java/lib/ext目录和系统环境变量java.ext.dirs指定目录所有类库。 3、Application ClassLoader 应用程序类加载器,由java实现,即AppClassLoader实现类。它的父类是ExtClassLoader,它主要负责加载classpath目录上的类库。如果没有自定义ClassLoader,它就是程序中默认的ClassLoader,即可以通过ClassLoader

idea2020.1 pojie

半腔热情 提交于 2020-08-09 11:05:23
前几天最新版的idea2020.1终于发布了,它有多香相信小伙伴们已经有所耳闻。现在就拿出来分享给小伙伴们。   所需要的的东西放在这里了,同时里面也放了一个idea2020.1,小伙伴可以选择性的下载或者去官网下载。链接:     https://pan.baidu.com/s/1Er1bSPsAj7NkmwH0Q9ONAA 提取码:ytld   下载安装以及先选择试用什么的傻瓜式操作就不再赘述,直接简洁简单上关键步骤:   1、选择试用启动idea   2、进入或解压文件里面的压缩包,进入lib文件夹      3、直接将jar文件用鼠标拖进idea界面,然后一路重启或者确定,中间出现什么拖放失败不用理会,直接点确定就好是正常现象。 点击Restart 直接点击为IDEA安装    4、重启之后一般情况下就已经破解完成,不需要再改配置文件,点击Help->Register查看是否成功破解      里面的激活码是重启之上自动填入的,如果不行找到下载的压缩文件lib下的ACTIVATION_CODE.txt换一个激活码或者查看README.pdf帮助。    来源: oschina 链接: https://my.oschina.net/u/3097161/blog/4292988

Java 最坑爹的 10 大功能点!

风格不统一 提交于 2020-08-09 11:05:12
作者:践行精神自由 https://www.sohu.com/a/357927861_115128 作为一门面向对象的编程语言, Java 凭借其简单易用、功能强大的特点受到了广大编程爱好者的青睐,伴随着开源社区的推波助澜, Java 语言更是席卷全球,势不可挡,在世界各地都有 Java 技术的从业者,它也常年高居编程语言排行榜的首位,足以表明 Java 的强悍与王者之风。 然而,即便是如此强大的编程语言,也有很多“坑爹”的功能,稍不注意,我们就会掉入坑里,轻则遭到同事的嘲笑和鄙视,重则造成悲惨后果而不得不跑路。 当然,坑爹这个词加上了双引号,因为大部分时候,都是由于我们不够熟练、违反我们的常识才造成了令人不愉快的后果。 今天我们就来梳理一下 Java 中最“ 坑爹 ”、 最违反常识的功能点 ,以排行榜的方式发布,以飨读者。说明一下,本文中的代码基于 JDK8 来编译实现。 1、switch必须加上break才结束 对于多重分支选择,一系列的if-else-if语句会让代码的可读性变差,建议使用switch语句来代替,然而switch case中的分支判断,必须加上break语句才会中止其它case的执行,比如: int count = 1; switch(count){ case 1: System.out.println("one"); case 2: System.out

Java Web(5)-Servlet详解(上)

不打扰是莪最后的温柔 提交于 2020-08-09 06:51:11
一、Servlet 1. 什么是Servlet Servlet 是 JavaEE 规范之一,规范就是接口 Servlet 就 JavaWeb 三大组件之一,三大组件分别是: Servlet 程序、Filter 过滤器、Listener 监听器 Servlet 是运行在服务器上的一个 java 小程序, 它可以接收客户端发送过来的请求,并响应数据给客户端 2. 手动实现Servlet程序 首先还是在IDEA中创建一个对应的模块,具体看上一个,结果如下 编写一个类去实现 Servlet 接口 实现 service 方法,处理请求,并响应数据 到 web.xml 中去配置 servlet 程序的访问地址 1. 首先在src下建立一个java文件,实现Servlet接口,重写方法 现在先看Servlet(),其他的省略 package com.md.servlet; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * @author MD * @create 2020-07-24 14:44 */ public class HelloServlet implements Servlet { /** *

IDEA版本彩虹屁插件idea-rainbow-fart,一个在你编程时疯狂称赞你的 IDEA扩展插件

荒凉一梦 提交于 2020-08-09 06:46:02
缘起 是否听说过程序员鼓励师,不久前出了一款vscode的插件rainbow-fart,可以在写代码的时候,匹配到特定关键词就疯狂的拍你马屁。 vscode的下载尝试过,但是作为日常将IDEA作为主力生产工具的同学来说,如何体验呢? 于是假期花了一点时间,写了一个idea版本的插件 idea-rainbow-fart 。 安装方法 先到 https://github.com/jadepeng/idea-rainbow-fart/releases 下载最新的插件。 下载rainbow-fart-1.0-SNAPSHOT.zip,然后打开Idea的插件目录,比如笔者的目录是 C:\Program Files\JetBrains\IntelliJ IDEA 2018.2.4\plugins 将 rainbow-fart-1.0-SNAPSHOT.zip 解压到plugins目录,如图所示: 然后重启IDEA即可。 使用说明 使用说明 使用内置语音包 打开设置: 将voice package type设置为builtin 可以选择内置语音包,共三个,一个官方的中文和英文,一个tts合成的(志玲姐姐) 使用第三方语音包: 将voice package type设置为custom 可以到 https://github.com/topics/vscode-rainbow-fart 查找语音包。

Java桌面应用程序打包

天涯浪子 提交于 2020-08-09 05:51:58
IDEA环境生成Jar 设置配置 File -> Project Structure -> Artifacts -> + -> JAR -> From modules with dependencies 选择模块的启动类main方法之后,勾选第二个选项,文件路径默认也可以。 构建构件 这里Build选项是第一次构建jar,Rebuild是修改后重新构建jar,clean是删除jar。 检查结果 在jar包所在目录的 通过 java -jar xxx.jar 在控制台运行程序,成功启动贪吃蛇小游戏。 exe4j 将jar打包为exe Welcome -> Next Project type -> 勾选第二个 JAR in EXE mode Application info -> 第一个框填应用程序的名字,第二个框是生成exe保存的文件路径 Executable info Java invocation 先导入相关jar包 再选择main方法的启动类 JRE ->两个框框后面提示多少就填多少,限制JDK版本 环境搜索顺序可调 后面都是无脑下一步 右键发送快捷方式到桌面,双击即可打开游戏! 来源: oschina 链接: https://my.oschina.net/u/4347613/blog/4297708