JDK

Java学习路线 之 javase学习路线

风流意气都作罢 提交于 2020-11-23 02:49:43
学习java已经有三年左右了,最近在复习数据结构的知识,同时也在总结我个人的学习路线,以及方式这里我将这些年我是如何进行java学习的,我是如何坚持下去的。请慢慢看下去吧。 javase学习篇 : 2016年冬12月我大一上学期的枯燥的生活结束了。放寒假回家后买了台电脑,我书顺便给我哥要了套视频,拿到视频后有个java学习路线,我就是按照那个进行学习的不过在后来我也是有所改变。具体的学习方式可以去我上篇的文章。下面我将每个学习的章节技术点以黑体加粗展示 先是从 认识面向对象 开始,因为我学过了C语言但是不是特别的熟练,而C语言没有对象的概念,他是面向过程的语言,所以就是认识什么是对象对象,java编程思想中有这样一句 “一切皆对象”,也就是在使用语言时可以把每一个部分当做对象。其实主要了解什么是对象,自己心中有这个概念就可以。 开发环境,工具 是学习任何一门语言的必备的技能,你要想搞明白这个语言的使用,“工欲善必先利器” 你就必须先把环境搭建起来,好多人工作了几年都不能把jdk给正确的安装下来,还需要baidu,这个是基础的技能,所以当我们学习的时候一定熟练掌握,比如最简单的就是把jdk的bin目录直接配置到path目录下。开发工具,你可能看的视频很多开始都是在记事本上给你演示的,其实在真正的开发中是不可能这样使用的,你想想一个个项目有时沉淀了四五年,那代码量是多么的多

java并发编程之volatile

柔情痞子 提交于 2020-11-22 14:33:46
  首先是一段简单的多线程代码 public class VolatileTest { private boolean flag = true ; public boolean isFlag() { return flag; } public void setFlag( boolean flag) { this .flag = flag; } public static void main(String[] args) throws InterruptedException, IOException { VolatileTest volatileTest = new VolatileTest(); Thread thread = new Thread(() -> { int i = 1 ; while (volatileTest.isFlag()){ i ++ ; } System.out.println(i); }); thread.start(); Thread.sleep( 2000 ); volatileTest.setFlag( false ); System.out.println( "设置结束标示" ); } }   运行main方法后,我们发现线程并不能被有效的终止,这其中有两个原因:1、cpu高速缓存2、JIT优化   在java中

自定义注解!绝对是程序员装逼的利器!!

一笑奈何 提交于 2020-11-22 13:56:17
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 315 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。 在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。 但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一个大大的功臣。 所以, 在我看来,会使用自定义注解 ≈ 好的程序员。 那么,本文,就来介绍几个,作者在开发中实际用到的几个例子,向你介绍下如何使用注解来提升你代码的逼格。 基本知识 在Java中,注解分为两种,元注解和自定义注解。 很多人误以为自定义注解就是开发者自己定义的,而其它框架提供的不算,但是其实上面我们提到的那几个注解其实都是自定义注解。 关于"元"这个描述,在编程世界里面有都很多,比如"元注解"、"元数据"、"元类"、"元表"等等,这里的"元"其实都是从meta翻译过来的。 一般我们把

Java并发编程-volatile

人走茶凉 提交于 2020-11-22 13:48:07
   上一篇文章 ,学习了并发编程中的synchronized,这个比较好理解,也是我最初学习多线程编程中的一个简单的实现的,大学的时候就会了,然后就一直以为多线程环境的同步只能通过这个来实现的,事实上Java还提供了另外一个更加轻量级的实现-volatile,如果说synchronized实现了数据在同一时刻只能有一个线程对数据访问的话,那么volatile实现的就是同时可以多个线程在访问数据,但是只要数据发生了变化,便确保其他线程及时“感知”这种变化。 1、 CPU 、主存及高速缓存的概念   计算机的硬件组成可以抽象为由总线、IO设备、主存、处理器(CPU)等组成。其中数据存放在主存中,CPU负责指令的执行,CPU的指令执行非常快,大部分简单指令的执行只需要一个时钟周期,而一次主内存数据的读取则需要几十到几百个时钟周期,那么CPU从主存中读写数据就会有很大的延迟。这个时候就产生了高速缓存的概念。   也就是说,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据回写到主存当中,通过这种方式来降低CPU从主存中获取数据的延迟。大致的示意图如下:   图一这个模型,可以简单的认为是单核模型,在这个模型里面,以i++这个操作为例,程序执行时

【原创】我还是很建议你用DelayQueue搞定超时订单的(1)

北城以北 提交于 2020-11-22 13:22:36
【原创】我还是很建议你用DelayQueue搞定超时订单的(1) 我就是那个人见人爱的 锦成同学,我是java进阶架构师社区的特邀作者, 今天为大家带来新的一篇小知识,祝各位宝宝能学到新知识...更上一层楼..... 一、用三根鸡毛做引言 真的! 不骗你们的喔~ 相信大家都遇到类似于:订单30min后未支付自动取消的开发任务 那么今日份就来了解一下怎么用延时队列 DelayQueue搞定单机版的超时订单 二、延时队列使用场景 那么什么时候需要用延时队列呢?常见的延时任务场景 举栗子: 订单在30分钟之内未支付则自动取消。 重试机制实现,把调用失败的接口放入一个固定延时的队列,到期后再重试。 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒。 用户发起退款,如果三天内没有得到处理则通知相关运营人员。 预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。 关闭空闲连接,服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。 清理过期数据业务。比如缓存中的对象,超过了空闲时间,需要从缓存中移出。 多考生考试,到期全部考生必须交卷,要求时间非常准确的场景。 三、解决办法多如鸡毛 定期轮询(数据库等) JDK DelayQueue JDK Timer ScheduledExecutorService 周期性线程池 时间轮(kafka) 时间轮

Java第一次作业

我的梦境 提交于 2020-11-22 09:59:02
(一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。 基本数据的输入通过两个语句来实现,即: Scanner input=new Scanner(System.in); 变量的类型 变量的名称=input.nexInt; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入一个数值:"); int length=input.nextInt();//输入一个正整数 System.out.println("输入的数字是:"+length);} } 2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。 Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100. 最终代码:(int)(Math

一位8年Java工作经验的高级架构师的学习路线图谱

允我心安 提交于 2020-11-22 09:52:15
从小白级到工作8年需要掌握的技术栈大概如下: 0-1年入门: Java基础复盘(面向对象+Java的超类+Java的反射机制+异常处理+集合+泛型+基础IO操作+多线程+网络编程+JDK新特性) Web编程初探(Servlet+MySQL数据库+商品管理系统实战) SSM从入门到精通(Spring+SpringMVC+Mybatis+商品管理系统实战-SSM版+Git+Maven) SpringBoot快速上手(SpringBoot+基于SpringBoot的商品管理系统实战) 零距离互联网项目实战(Linux+Redis+双十一秒杀实战系统) 1-3年高工: 并发编程进阶(并发工具类实战+CAS+显示锁解析+线程池内部机制+性能优化) JVM深度剖析(理解运行时数据区+堆外内存解读+JDK+内存泄漏问题排查+Arthas+GC算法和垃圾回收器+类加载机制等) MySQL深度进阶 深入Tomcat底层(线程模型+性能调优) 3-5年资深: 数据库(调优+事务+锁+集群+主从+缓存等) Linux(命令+生产环境+日志+Nginx等) 中间件&分布式(dubbo+MQ/kafka、ElasticSearch、SpringCloud等组件) 5-8年架构: 开源框架(Spring5源码+SpringMVC源码+Mybatis源码) 分布式架构(Zk实战+RabbitMQ

自定义注解!绝对是程序员装大佬的利器!!

匆匆过客 提交于 2020-11-22 09:50:31
作者 l Hollis 来源 l Hollis(ID:hollischuang) 相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。 在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。 但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一个大大的功臣。 所以, 在我看来,会使用自定义注解 ≈ 好的程序员。 那么,本文,就来介绍几个,作者在开发中实际用到的几个例子,向你介绍下如何使用注解来提升你代码的逼格。 基本知识 在Java中,注解分为两种,元注解和自定义注解。 很多人误以为自定义注解就是开发者自己定义的,而其它框架提供的不算,但是其实上面我们提到的那几个注解其实都是自定义注解。 关于"元"这个描述,在编程世界里面有都很多,比如"元注解"、"元数据"、"元类"、"元表"等等,这里的"元"其实都是从meta翻译过来的。 一般我们把 元注解理解为描述注解的注解,元数据理解为描述数据的数据,元类理解为描述类的类 … 所以,在Java中

JDK源码分析 – String、StringBuilder、StringBuffer

若如初见. 提交于 2020-11-22 07:22:19
String类的申明 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {…} String类用了final修饰符,表示它不可以被继承,同时还实现了三个接口, 实现Serializable接口表示String类可被序列化;实现Comparable<T> 接口主要是提供一个compareTo 方法用于比较String字符串;还实现了CharSequence 接口,这个接口代表的是char值得一个可读序列( CharBuffer , Segment , String , StringBuffer , StringBuilder 也都实现了CharSequence接口) String主要字段、属性说明 /* 字符数组value,存储String中实际字符 */ private final char value[]; /* 字符串的哈希值 默认值0 */ private int hash; /* 字符串的哈希值 默认值0 */ /* 一个比较器,用来排序String对象, compareToIgnoreCase方法中有使用 */ public static final Comparator<String> CASE_INSENSITIVE_ORDER =

丰桥运单打印windows/linux环境安装(原)

我只是一个虾纸丫 提交于 2020-11-22 07:00:18
Linux ①linux下安装jdk1.8,执行命令:yum -y install java ②创建文件夹sf-service将csim_waybill_print_service_V1.0.3.jar放在文件夹顺丰电子面单SDK-1.0.3中 ③执行命令:chmod 777 csim_waybill_print_service_V1.0.3.jar 进行授权 ④linux下进入sf-service文件,执行命令:nohup java -jar csim_waybill_print_service_V1.0.3.jar & [java -jar csim_waybill_print_service_V1.0.3.jar & 也行](如图就是成功开启服务了) (注:nohup <程序名> &:命令在Unix/Linux中,普通进程用“&”符号放到后台运行,则控制台logout后,进程仍然继续运行,起到守护进程的作用,使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用)。   最后阿里云配置安全组开放4040端口:   验证服务运行情况: 浏览器访问http://localhost:4040/servertest.html(4040为启动端口),显示“OK!”则表示启动成功 Windows   官网有,不写了,告辞~    来源: