JDK

Java8中你可能不知道的一些地方之Lambda

谁都会走 提交于 2020-08-18 20:53:02
Lambda 表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理。很多语言(Groovy、Scala等)从设计之初就支持 Lambda 表达式。但是 java 中使用的是匿名内部类代替。最后借助强大的社区力量,找了一个折中的 Lambda 实现方案,可以实现简洁而紧凑的语言结构。 一、匿名内部类到Lambda的演化 匿名内部类,即一个没有名字的,存在于一个类或方法内部的类。当我们需要用某个类且只需要用一次,创建和使用合二为一时,我们可以选择匿名内部类,省掉我们定义类的步骤。 匿名内部类会隐式的继承一个类或实现一个接口,或者说匿名内部类是一个继承了该类或者实现了该接口的子类匿名对象。下面看一个匿名内部类的例子: 测试类中调用方法 package com.lotbyte.main; /* 定义和使用匿名内部类 */ public class NoNameClass { public static void main(String[] args) { Model m = new Model(){ @Override public void func() { System.out.println("方法的实现"); } }; m.func(); } } // 需要被实现的接口 interface Model{ void func(); } 二

奈学:Executor框架的概述

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-18 20:27:57
  JDK1.5之前,我们如果想要使用Java线程来完成相关任务,一般涉及两个类,一个是Thread类,一个Thread对象在启动(start)之后会创建一个关联的本地操作系统线程,随后会自动回调run方法。另一个是Runnable接口,可以看作 run方法的抽象,代表线程任务。通过Runnable和Thread的配合可以编写我们自己的多线程逻辑。   可以看到,此时Java对于多线程编程的支持还是比较原始的,功能也并不多。因此,在JDK1.5的JUC包中,对Java的多线程应用做了一次全面的扩展,比如新lock锁、并发容器等,还有一个重要的扩展就是出现了Executor执行框架。   Executor执行框架将Java线程的应用做了更细致的功能划分,并且进行了功能的增强,大概包括三个部分:   线程任务   JDK1.5之前,只有Runnable代表线程任务,对于受检异常,必须手动在try catch中处理,不支持throws声明可能抛出的异常,不支持任务返回值。   JDK1.5的时候,出现了Callable接口,可以看作Runnable的增强:对于受检异常,可以不用在try catch中处理,支持throws声明可能抛出的异常,并且支持任务返回值。   执行器   JDK1.5之前,线程任务的执行需要我们手动创建Thread对象、传入任务、并调用start方法

搭建一套ASP.NET Core+Nacos+Spring Cloud Gateway项目

不羁的心 提交于 2020-08-18 15:06:55
前言 伴随着随着微服务概念的不断盛行,与之对应的各种解决方案也层出不穷。这毕竟是一个信息大爆发的时代,各种编程语言大行其道,各有各的优势。但是有一点未曾改变,那就是他们服务的方式,工作的时候各司其职,但是需要提供服务的时候必须要高度统一,这也是微服务的概念之一。日常的工作学习中,我个人更喜欢通用的解决方案,特别是能将不同编程语言亦或者不同编程框架整合到一起的那种,这种解决方案拉近了编程语言之间的距离,让开发者能更清楚的意识到编程语言只是工具,解决问题才是王道。好了口遁到此结束,接下来我就搭建一套.Net体系结合Java体系的项目架构。 概念介绍 接下来我们用到的技术栈名词主要涉及到ASP.NET Core、Nacos、Spring Cloud Gateway,接下来我们分别介绍所使用的的三种框架。 Nacos Nacos是阿里巴巴开源的致力于服务发现、配置和管理微服务的框架。提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。一般用到的最多的就是当做配置中心和注册中心。 中文官网地址: https://nacos.io/zh-cn/ 官方 GayHub GitHub地址: https://github.com/alibaba/nacos 下载地址: https://github.com/alibaba/nacos/releases

面试官想问的HashMap,都在这一篇里面了!

时光毁灭记忆、已成空白 提交于 2020-08-18 14:33:54
一、HashMap的数据结构 HashMap < String , String > map = new HashMap ( ) ; map . put ( "1" , "Kobe" ) ; 这两行代码表示数据已经在HashMap中存储完成。 而这也引发了一个问题,数据如何才能在HashMap中高效地存储? 从这个问题出发,我们首先应该了解HashMap的底层数据结构。 HashMap: 数组+链表[单向链表]+红黑树 JDK1.8 我们都知道的是HashMap是存储键值对(key,value)的容器,那么从上图来看在每个小格子中应当放入key还是value或者都存放呢? 如果大家看过源码就会知道,这里采用了一种面向对象的思想,将【key,value】封装起来 class Node { private String key ; private String value; } 由此可知,每一个小格子就是一个new Node,而如果要将他们具体实现出来,只需要在Node的基础上稍加改动即可。 Node [ ] table = new Node [ 24 ] ; //表示数组 class Node { private String key ; //表示单项链表 private String value; Node next ; } class TreeNode entends Node

【JavaSE 并发CAS】原理层面:CAS(AtomicInteger类compareAndSet()方法到底干了什么?)

社会主义新天地 提交于 2020-08-18 14:33:00
文章目录 一、前言 二、CAS操作 2.1 CAS三步操作+CAS与阻塞同步的对比+三种锁 2.1.1 CAS三步操作 2.1.2 CAS与内建锁比较 2.1.3 三种锁 2.2 CAS的应用:AtomicInteger类中的compareAndSet()方法使用for+if(cas)保证线程安全 2.2.1 从AtomicInteger类incrementAndGet()方法的源码出发,开启底层探索 2.2.2 继续深入AtomicInteger类的compareAndSet方法 2.2.3 继续深入native compareAndSwapInt()方法 2.2.4 继续深入UNSAFE_ENTRY()方法 2.2.5 继续深入的Atomic::cmpxchg() 三、CAS的ABA问题 3.1 什么是ABA问题(理论解释,一图就好了) 3.2 代码重现ABA问题(代码,面试没用) 3.3 ABA问题:原因、突破口、解决方式、源码支持 3.3.1 ABA问题的产生原因(背诵) 3.3.2 ABA问题:从原因到突破口再到解决方式(背诵) 3.3.3 ABA问题两个类的源码:不仅比较数值,还有比较当前的数值是否被修改过 1、AtomicStampedReference类 2、AtomicMarkableReference类 3.4 代码解释ABA问题两个类处理 3.4.1

Java基础知识学习

为君一笑 提交于 2020-08-18 14:32:43
Java基础知识学习 1.java的诞生 首先,说起Java的诞生我们先聊一聊C语言和C++。 C语言诞生于1972年,它是一门面向过程的结构化语言,主要的特点有以下三点: 贴近硬件,运行速度快,效率很高 主要应用有操作系统,编译器,数据库,网络系统等等 指针和内存管理等等 C++诞生于1982年,它兼容了C面向过程的特点,同时也具有面向对象的特点,其有以下几点: 面向对象 同时兼容C的特性 主要应用于图形领域和制作游戏等等 说完了C/C++的语言特点,可能学过的同学应该知道,C语言的指针还是比较难学的,还有其内存管理也是比较复杂。那么有没有一种语言能够避免这些问题呢? 这就是我们Java的诞生,Java的特点有:语法有点像C,没有指针和内存管理,可移植性强, 编写一次,到处运行 (write once,run everywhere),面向对象,类型安全,有大量的类库等等。Java的特性和优势,主要有简单性,面向对象,高性能,分布式,动态性,多线程,安全性,健壮性等等。 那么Java主要有一下三个版本,Java SE(标准版),Java ME(移动版),Java EE(企业版) 随着Java的不断发展,也诞生了不少工具,比如说有以下几类: 构建工具:Ant ,Maven,Jekins 应用服务器:Tomcat,Jetty , Websphere,Weblogic Web开发

asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

不羁岁月 提交于 2020-08-18 14:25:08
最近在学习张善友老师的 NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionless的学习做下笔记! Exceptionless是什么?能做什么呢? “Exceptionless”这个词的定义是:没有异常。Exceptionless可以为您的ASP.NET、Web API、WebFrm、WPF、控制台和MVC应用程序提供实时错误、特性和日志报告。它将收集的信息组织成简单的可操作的数据,这些数据将帮助你很方便的查看异常信息。还有最重要的是,它是开源的! Exceptionless的使用方式有哪些? 1.官网创建帐号,并新建应用程序以及项目,然后生成apikey(数据存储在Exceptionless) 2.自己搭建Exceptionless的环境,部署在本地(数据存储在本地) Exceptionless的运行环境有哪些要求?需要安装哪些软件,进行什么配置呢? .NET 4.6.1 (安装了.net core 或者vs2017的话环境应该都没问题,不需要额外安装) Java JDK 1.8+(如果使用windows系统的话需要配置环境变量,这个使用过java的人应该都知道吧!相信对于你来说应该不是难事).下载地址:http://www.oracle.com

解Bug之路-dubbo流量上线时的非平滑问题

蹲街弑〆低调 提交于 2020-08-18 14:24:43
前言 笔者最近解决了一个困扰了业务系统很久的问题。这个问题只在发布时出现,每次只影响一两次调用,相较于其它的问题来说,这个问题有点不够受重视。由于种种原因,使得这个问题到了业务必须解决的程度,于是就到了笔者的手上。 问题现场 我们采用的是dubbo服务,这是个稳定成熟的RPC框架。但是我们在某些应用中会发现,只要这个应用一发布(或者重启),就会出现请求超时的问题,如下图所示: 而且都是第一笔请求会报错,之后就再也没有问题了。 排查日志 好了,现象我们知道了,于是开始排查那个时间点的日志。Server端没有任何日志,而Client(App1)端报错超时。报错如下所示: 2019-08-22 20:33:50.798 com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method set in the servce XXXFacade, tries 1 times ...... start time: 2019-08-22 20:32:50.474 end time: 2019-08-22 30:33:50.767 timeout=60000,channel:/1.1.1.1:44502->2.2.2.2:20880 看日志报错是这个tcp五元组(1.1.1.1:44502->2.2.2.2:20880)有问题

Skywalking 6.0+elasticsearch6 环境搭建

╄→尐↘猪︶ㄣ 提交于 2020-08-18 13:11:18
原文: https://yangxx.net/?p=3825 所需环境 jdk1.8 elasticsearch6.5.4 下载地址 skywalking-6.2.0 下载地址 centos 7.6 JDK安装 安装及配置过程省略 es 安装 下载解压并ES文件 配置文件 修改${es_home}/config/elasticsearch.yml # 集群名称 cluster.name : es -cluster # 节点名称 node.name : node1 #指定该节点是否有资格被选举成为master节点,默认是true, node.master : true #允许该节点存储数据(默认开启) node.data : true # 数据的默认存放路径 path.data : /home/skywaling/soft/elasticsearch -6.5.4/data/ # 日志的默认存放路径 path.logs : /home/skywaling/soft/elasticsearch -6.5.4/log/ # bind IP地址 network.host : 0.0.0.0 # 服务端口 http.port : 9200 # 集群服务的端口 transport.tcp.port : 9300 bootstrap.memory_lock : false bootstrap

IntelliJ IDEA(2020.2)的下载、安装步骤(详细讲解)

ぐ巨炮叔叔 提交于 2020-08-18 12:54:54
本次安装的 IntelliJ IDEA 版本:2020.2 (当前最新版本,2020.07.28发布的202.6397.94版) 官方推荐的安装条件(指当前你手里电脑的配置)如下: 1、64位版本的 wind 10、wind 8; 2、推荐8G的RAM,最小也得是2G的RAM; 3、2.5G的磁盘空间,最好是SSD(固态的); 4、1024x768的屏幕分辨率; 说白了,以上配置,是基于能满足 IntelliJ IDEA 的最基本条件,也是官方推荐要给 IntelliJ IDEA 的基本分配; 一、找到 IntelliJ IDEA 的官网地址: https://www.jetbrains.com/idea/ ,下载安装包 二、有米的,可以选左边的收费旗舰版的,功能多(有30天免费体验期);米少的,可以选择右边的免费社区版的,够用。点击下载,就可以了,此处以免费版为例 注意:Download 后面有个后缀可以选择(.exe:Install方式,表示需要一步步安装 /.zip:压缩包方式,表示不需要安装,解压后就可以用,相当于绿色版),此处以.exe为例安装。 三、找到下载好的安装包,双击开始安装 四、启动页面,直接点击下一步 五、选择安装的路径,我习惯安装到根路径下,然后下一步 六、选择安装前的配置 Create Desktop Shortcut :根据你的电脑选择对应的位数