AS/400的历史
以后要使用as/400 先提前了解一下 做个准备 ,百度好难找到as/400的资料 …
AS/400的历史1.1. AS/400的诞生背景在介绍AS/400之前,先简单回顾一下AS/400的发展历史。IBM AS/400的创始人Frank G.Soltis 博士认为“历史”对设计新型计算机系统的影响力远胜于其他因素。同样,在设计一个新型计算机系统时,开发的场所和先前的产品也有着相当大的影响力。
60年代,位于美国东部(the EastCoast)的许多计算机公司,例如Digital,Data General页以及IBM的NewYork Lab. 等,占尽地利,不仅分享了诸如MIT等名校和研究所的研究成果,而且雇佣了大批东部高校的高材生。MIT当时曾为美国国防部开发了一个名为MULTICS的项目。东部的公司在设计计算机的结构和操作系统时,大量借鉴了MULTICS的思想。Bell Lab.的UNIX正是这一环境下的产物。
UNIX系统是一个分时系统。最早的UNIX系统于1970年问世。此前,只有面向批处理作业的操作系统,这样的系统对于需要立即得到响应的用户来说是太慢了。在60 ...
JVM
JVM字节码准确的说 任何能在JVM平台上执行的字节码格式都是一样的 所以应该统称为jvm字节码
虚拟机所谓虚拟机 就是一台虚拟的计算机 是一款软件 用来执行一系列虚拟机计算机指令 大体上可分为
系统虚拟机 和 程序虚拟机
Java虚拟机是一台执行 java字节码的虚拟计算机 java技术的核心就是java虚拟机
HotSpot JRocket J9 三大虚拟机
Java虚拟机就是二进制字节码的运行环境
特点:
一次编译 到处运行
自动内存管理
自动垃圾回收机制
jvm是运行在操作系统之上的 它与硬件没有直接的交互
JVM的整体结构
HotSpot VM是目前市面上高性能虚拟机的代表作之一
它采用 解释器和即时编译器 并存的架构
方法区 和 堆 多线程共享
栈 本地方法栈 程序计数器 每个线程独享一份
执行引擎 (3部分) : 解释器(JIT编译器 ) 即时编译器 垃圾回收器
负责 将高级语言 翻译成 机器语言
第一次编译成字节码文件 第二次在JIT编译成机器指令
JVM的架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构 另外一种指令集架构是基于寄 ...
JVM类的加载
JVM类的加载器和加载过程
之前JVM的那篇笔记实在太长了 不方便 查阅 故在复习时把每个章节拆出来独立成文
类加载器子系统作用
类加载器子系统 负责从文件系统或者网络中加载class文件 class文件在文件开头有特定的文件标识
ClassLoader只负责class文件的加载 ,至于他是否可以运行,则由Execution Engine 执行引擎决定
加载的类信息 存放于一块称为方法区的内存空间. 方法区还会存放运行时常量池信息 可能还包括字符串 字面量和数字常量 (这部分常量信息是class文件中的常量池)
类加载器
class file存在于本地硬盘 可以理解为设计师画在纸上的模板 而最终这个模板在执行的时候是要加载到JVM中来 根据这个文件 实例化出n个一模一样的实例
class file加载到JVM中 称为DNA元数据模板 放在方法区
在class文件 – >jvm –>元数据模板 过程需要一个运输工具 (类装载器)
左边为堆空间
类的加载过程
加载
通过一个类的全限定名获取定义此类的二进制字节流
将这个字节流所代表的静态存储结构转化为方法区的运行时 ...
执行引擎
执行引擎
执行引擎是Java虚拟机核心的组成部分之一
“虚拟机”是一个相对于”物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器,缓存,指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式
JVM的主要任务是负责装载字节码到内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅是一些能够被JVM所识别的字节码指令,符号表,以及其他辅助信息
那么,如果想要让一个Java程序运行起来,执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以.简单来说,JVM的执行引擎充当了将高级语言翻译为机器语言的译者
java代码编译和 执行的过程
问题:什么是解释器,什么是JIT编译器?解释器:当Java虚拟机启动的时候会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容”翻译”为对应平台的本地机器指令执行
JIT编译器: 就是虚拟机将源代码直接编译成和本地机 ...
接口幂等性问题
接口幂等性订单防止重复提交 网络不好 用户点击多次
什么是幂等性用户对于同一操作发起的一次请求或者多次请求的结果是一致的 不会因为多次点击产生副作用 比如说支付场景 用户购买了商品支付扣款成功 但是返回结果的时候网络异常 这时候钱 已经扣掉了 再次点击会进行二次扣款…这就没有保证接口的幂等性
那些情况需要防止用户多次点击按钮
用户页面回退再次提交
微服务相互调用
由于网络问题导致请求失败 feign触发重试机制
其它业务情况
什么情况下需要幂等以sql为例子 查询 删除 操作大部分是天然的幂等性 因为在第一次的时候已经删除成功了
叠加状态 每次执行结果都不一样则不是幂等性
幂等性解决方案
索引 订单号 唯一
举例:五种方案令牌机制
ytmall商城项目采用这个方案
存在问题: 如果业务执行后才删令牌 令牌仍然有可能多次进入
如果先删令牌
保证获取令牌 对比 删除 必须是 原子性的
可以在redis 使用lua脚本完成这个原子操作操作
1if redis.call('get',KEY[1]) == ARGV[1] then return redis.call ...
Spring Bean的生命周期
Spring Bean的生命周期生命周期的概要流程Bean的生命周期概括起来就是4个阶段
实例化(Instantiation);
属性赋值(Populate);
初始化(Initialization);
销毁(Destruction);
实例化:第1步 实例化一个Bean对象
属性赋值: 第2步 为bean设置相关属性的依赖
初始化: 第3~7步,步骤较多,其中第5,6步为初始化操作,第3,4步为初始化之前执行,第7步在初始化后执行,该阶段初始化后执行,该阶段结束,才能被用户使用;
销毁: 第8,9步,第8步不是真正意义上的销毁(还没使用呢),而是先在使用前注册了销毁的相关调用接口,为了后面第9,10步真正销毁bean时再执行相应的方法.
下面结合代码来看,在doCreateBean()方法中可以看到一次执行了这四个阶段
123456789101112131415161718192021// AbstractAutowireCapableBeanFactory.javaprotected Object doCreateBean(final String beanName, f ...
Java常见集合类型对比
Java常见集合类型对比
List 和 Set 区别
List, Set 都是继承自 Collection 接口
List 特点:元素有放入顺序,元素可重复。Set 特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在 set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的)
List 接口有三个实现类:LinkedList,ArrayList,Vector。Set 接口有两个实现类:HashSet(底层由 HashMap 实现),LinkedHashSet
List 和 Map 区别
List 特点:元素有放入顺序,元素可重复;
Map 特点:元素按键值对存储,无放入顺序 ;
List 接口有三个实现类:LinkedList,ArrayList,Vector;
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;
Map 接口有三个实现类:HashMap,HashTable,LinkedHashMap
Map 相当于和 Collection 一个级别的;Ma ...
新的日期和时间类
新的日期和时间类
LocalDate
LocalTime
LocalDateTime
都是不可变的对象 三者使用方式一样
12获取实例 用静态方法LocalDateTime.now()
Instant 时间戳 默认获取UTC 时区
1Instant.now.atOffset(ZoneOffset.ofHours(8))
Duration 计算两个时间之间的间隔
Period 计算两个日期之间的间隔
12345Duration.between(ins1,ins2)Duration.between(lt1,lt2)Period.between(ins1,ins2)Period.between(lt1,lt2)
TeporalAdjuster 时间校正器 接口
12345ldt.withDayOfMonth(10) 指定月份//自定义ldt.with(()->{ })
DateTimeFormatter 格式化
123456DateTimeFormatter dtf = DateTimeFormatter ISO_DATE_TIME; ...
Java易错知识点汇总
Java-易错知识点汇总
Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
答: Math.round(-11.5)返回值是-11
Math.round(11.5)返回值是12 四舍五入 的原理是在参数上加0.5然后向下取整
switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。
从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
抽象类(abstract class)和接口(interface)有什么异同? 答:
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。
一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
接口比抽象类更加抽象,因为抽象类中可以定义构造器,可 ...
SpringBoot相关问题
SpringBoot相关问题什么是SpringBoot?为什么使用SpringBoot?
用来简化Spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
创建独立的spring引用程序 main方法运行
嵌入的Tomcat无需部署war文件
简化maven配置
自动配置spring添加对应功能starter自动化配置
springboot来简化spring应用开发,约定大于配置,去繁重简,just run 就能创建一个独立的,产品级别的应用
SpringBoot 的优点非常多
独立运行
SpringBoot内嵌了各种servlet容器,Tomcat,Jetty等,现在不需要打包成war包部署到容器中,SpringBoot只要打包成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内
简化配置
Spring-boot-starter-web启动器自动依赖其他组件,减少了maven配置
自动配置 SpringBoot能根据当前类路径下的类,jar包来自动配置bean,如添加一个spring-boot-starter-web启动 ...