IntelliJ IDEA

StackOverflow 上面最流行的 7 个 Java 问题!

大兔子大兔子 提交于 2020-04-29 12:38:15
StackOverflow发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。 这篇文章是在我们审阅了StackOverflow上最流行的 Java 问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。 一、分支预测 问题链接: https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array StackOverflow上最多投票的一个Java问题是: 为什么处理一个排序数组要比非排序数组快的多 。 为了回答这个问题,你需要使用分支预测(branch prediction)。分支预测是一种架构,旨在通过在真实的路径发生前猜测某一分支的下一步来提升处理过程。 分支在这里即一个if语句。这样的话,如果是一个排序数组,那么分支预测将会进行,否则不会进行。 StackOverflow上的一个回答者,链接: http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array

IDEA 中 30 秒生成 Spring Cloud Alibaba 工程

拥有回忆 提交于 2020-04-29 12:33:24
作者 | 图恩 阿里云技术专家 如果你想使用 Spring Cloud Alibaba,那么你遇到的第一个问题一定是如何快速的创建一个脚手架工程。 近日, 阿里巴巴发布了 Spring 的国内脚手架定制版 Aliyun Java Initializer ,因为全中文界面和流畅速度,被广大开发者热传。Spring 脚手架为开发者提供了丰富的可选组件,并且可以选择多种打包方式,大大方便了开发人员的使用。Web 端 Spring 脚手架可以帮助用户快速上手,但很多开发者也面临一个问题:在 Web 版本 Spring 脚手架生成工程最终要导入 IDE 中,开发者需要进行 IDE 切换,在一定程度上,增加了开发时间。 无需切换 IDE 为了更加贴近用户开发场景,提高开发效率,让开发者无需从 IDE 切换出去,通过插件功能 30 秒直接生成 Spring Cloud Alibaba 工程,自动导入。我们在本地 IDE 插件 Alibaba Cloud Toolit 中提供了与 Spring 脚手架定制版 Aliyun Java Initializer一样的功能,让你无需切换,30 秒一键生成 Spring Cloud Alibaba 工程。 Cloud Toolkit 四步创建 Spring Cloud Alibaba 框架 如果还没有安装过 Cloud Toolkit,可以在 IDEA

Intellij IDEA 那些隐藏好用的小技巧

假装没事ソ 提交于 2020-04-29 11:51:39
作者:Sam哥哥 https://blog.csdn.net/linsongbin1/article/details/80560332 概述 之前写了一篇介绍IntellIJ IDEA的文章《 Intellij Idea非常6的10个姿势 》,主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的 IntellIJ IDEA 小技巧。由于篇幅原因,只是列出了一小部分,那么接下来的这篇文章,会继续补充一些 IntellIJ IDEA 的小技巧。 别轻易自定义快捷键 有蛮多操作, IntellIJ IDEA 并没有给我们设置默认快捷键,需要使用者自己去定义快捷键。比如说: Rebuild Project Compare With Branch 为了能在 IntellIJ IDEA 里进行 无鼠标编程 ,很多程序员都会自定义快捷键,但是有三个地方你可能需要注意一下。 经常会出现快捷键与其他应用的快捷键冲突的情况; 自定义太多快捷键了,你也不太好记住; 使用其他同事的IDEA时(比如说帮忙定位问题),你自定义的快捷键没法用。 其实在 IntellIJ IDEA 里的每个操作,都可以看出一个 action 。我们可以使用 ctrl+shift+a 来输入我们要使用的操作。比如说,上面提到的 Rebuild Project 。你可以先使用 ctrl+shift+a 快捷键,然后输入

14个快捷键让你的idea飞起来(新手向 + 演示)

和自甴很熟 提交于 2020-04-29 10:50:08
本期盘点一下博主在工作中,常用的13个idea快捷键,这些快捷键基本涵盖了大部分的开发场景,希望可以萌新们的idea使用效率,系统为mac系统 上一步 / 下一步 撤销 / 反撤销 进入一个类 生成方法 变量命名 / 代码提示 打开 Project/structure面板 收起/展开代码 批量修改名称 查看方法调用链 查看方法调用位置 代码格式整理 创建文件 关键字搜索 突出显示 上一步 / 下一步 alt + -> / alt + <- 类似于我们的浏览器的上一页/下一页,切换到光标上一个/下一个移动的位置 撤销 / 反撤销 ctrl + z / ctrl + shift + z 如果你使用过world, 就会知道在world中的反撤销是ctrl + y,但是非常坑爹的是在idea中,ctrl + y是删除当前行 进入一个类 command + B 如果是您使用的是鼠标的话,这个操作就是command + 鼠标左键,我们可以通过上述的[上一步],执行进入后退出一个类 生成方法 control + return getter/setter/toString/equals … 常用来给pojo类生成getter/setter方法, 变量命名 / 代码提示 alt + return 这里演示一个idea根据提示替换代码的例子(只是简单演示idea的提示与替换功能,代码本身毫无意义)

JAVA元注解@interface详解

偶尔善良 提交于 2020-04-29 10:11:28
jdk1.5起开始提供了4个元注解,用来定义自定义注解的注解,它们分别是: @Target 指定注解使用的目标范围(类、方法、字段等),其参考值见类的定义:java.lang.annotation.ElementType @Documented 指定被标注的注解会包含在javadoc中。 @Retention 指定注解的生命周期(源码、class文件、运行时),其参考值见类的定义:java.lang.annotation.RetentionPolicy @Inherited 指定子类可以继承父类的注解,只能是类上的注解,方法和字段的注解不能继承。即如果父类上的注解是@Inherited修饰的就能被子类继承。 jdk1.8又提供了以下两个元注解 @Native 指定字段是一个常量,其值引用native code。 @Repeatable 注解上可以使用重复注解,即可以在一个地方可以重复使用同一个注解,像spring中的包扫描注解就使用了这个。 所有元注解定义在java.lang.annotation包下面 其中Annotation是注解的基本接口,所有的注解都继承这个接口。 看下@Autowired注解的实现 其实就是继承了Annotation接口。 了解了jdk对注解的定义,所以想要自定义一个注解就以@interface开始吧。 推荐去我的博客阅读更多: 1. Java JVM

Java ASM学习(2)

非 Y 不嫁゛ 提交于 2020-04-29 09:00:05
1.编译后的方法区,其中存储的代码都是一些字节码指令 2.Java虚拟机执行模型: java代码是在一个线程内部执行,每个线程都有自己的执行栈,栈由帧组成,每个帧表示一个方法的调用,每调用一个方法,都将将新的帧压入执行栈,方法返回时(不管是整成return还是异常返回),该方法对应的帧都将出栈,即按照先进后出的规则。 执行栈与操作数栈不一样,操作数栈包含在执行栈中。每一帧包括局部变量和操作数栈两部分,操作数栈中包括字节码指令用来当操作数的值。比如a.equals(b)将创建一帧,此时该帧将有一个空栈,并且a和b作为局部变量 字节码指令: 由标识该指令的操作码和固定数目的参数组成,操作码指定要进行哪一类操作,参数指定具体精确行为。指令分为两类,一类在局部变量和操作数栈之间传值,一类从操作数栈弹出值计算后再压入 例如: ILOAD,LLOAD,FLOAD,DLOAD,ALOAD读取一个局部变量,并将其值压入操作数栈中,其对应的参数是其读取的局部变量索引i(因为局部变量就是通过索引来进行随机访问的),LLOAD和DLOAD加载时需要两个槽(slot),因为局部变量部分和操作数占部分的每个槽(slot)都可以保存除了long和double之外的java值(long和double需要两个槽)。 ILOAD:加载boolean、 char 、 byte 、 short 、int局部变量

彻底弄懂 HTTP 缓存机制及原理!

こ雲淡風輕ζ 提交于 2020-04-28 20:24:35
作者:云中桥 www.cnblogs.com/chenqf/p/6386163.html 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。 但是对于很多前端同学来说,仅仅只是知道浏览器会对请求的静态文件进行缓存,但是为什么被缓存,缓存是怎样生效的,却并不是很清楚。 在此,我会尝试用简单明了的文字,像大家系统的介绍HTTP缓存机制,期望对各位正确的理解前端缓存有所帮助。 在介绍HTTP缓存之前,作为知识铺垫,先简单介绍一下HTTP报文 HTTP报文就是浏览器和服务器间通信时发送及响应的数据块。 浏览器向服务器请求数据,发送请求(request)报文;服务器向浏览器返回数据,返回响应(response)报文。 报文信息主要分为两部分 1.包含属性的首部(header)--------------------------附加信息(cookie,缓存信息等)与缓存相关的规则信息,均包含在header中 2.包含数据的主体部分(body)-----------------------HTTP请求真正想要传输的部分 缓存规则解析 为方便大家理解,我们认为浏览器存在一个缓存数据库,用于存储缓存信息。 在客户端第一次请求数据时,此时缓存数据库中没有对应的缓存数据

面试被问傻!5亿个数大文件怎么排序?

守給你的承諾、 提交于 2020-04-28 20:12:26
曾经被问傻的一道面试题分享给你: 给你1个文件 bigdata ,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数: 6196302 3557681 6121580 2039345 2095006 1746773 7934312 2016371 7123302 8790171 2966901 ... 7005375 现在要对这个文件进行排序,怎么搞? 内部排序 先尝试内排,选2种排序方式: 3路快排: private final int cutoff = 8; public <T> void perform(Comparable<T>[] a) { perform(a,0,a.length - 1); } private <T> int median3(Comparable<T>[] a,int x,int y,int z) { if(lessThan(a[x],a[y])) { if(lessThan(a[y],a[z])) { return y; } else if(lessThan(a[x],a[z])) { return z; }else { return x; } }else { if(lessThan(a[z],a[y])){ return y; }else if(lessThan(a[z],a[x])) { return z; }else { return

Spring Boot 使用@ConfigurationProperties

六月ゝ 毕业季﹏ 提交于 2020-04-28 16:30:01
自动绑定参数 当配置文件中存在相同组的属性,用户名、密码、年龄 都属于用户属性的抽象,按面向的规则我们可以抽取出一个 User 的PO类型使用 @ConfigurationProperties 将外部配置绑定到代码中的bean。同时可以像其他任何Spring bean一样在整个应用程序代码中注入和使用此bean。 /** * 2.2 之前版本,必须使用 @Component 或者 @Configuration 声明成Spring Bean */ @Component @ConfigurationProperties(prefix = "user") public class User { // 必须提供Set方法 private String username; private String password; private Integer age; } ConfigurationPropertiesScan Spring boot 2.2.0 新增一个 @ConfigurationPropertiesScan 的注解,默认是开启的扫描 main 启动类所在的包路径的所有 ConfigurationProperties , 所以可以不用再加 @Component 或者 @Configuration ; Spring boot 2.2.1 及以上版本默认关闭此功能