Java Tags
- 标签:Java Tags
- 时间:2018年11月1日14:37:44
- 连接:http://www.saveload.cn/html/mood/2018/Java Tags.mk
-
equals与==的区别 ==与equals的主要区别是:==常用于比较原生类型,而equals()方法用于检查对象的相等性。另一个不同的点是:如果==和equals()用于比较对象,当两个引用地址相同,==返回true。而equals()可以返回true或者false主要取决于重写实现。最常见的一个例子,字符串的比较,不同情况==和equals()返回不同的结果。equals()方法最重要的一点是,能够根据业务要求去重写,按照自定义规则去判断两个对象是否相等。重写equals()方法的时候,要注意一下hashCode是否会因为对象的属性改变而改变,否则在使用散列集合储存该对象的时候会碰到坑!!理解equals()方法的存在是很重要的。
-
static: 接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量。 static修饰就表示它属于类的,随的类的加载而存在的,当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了。 如果是非static的话,就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以接口的常量必须定义为static。
-
final: 接口中不可以定义变量即定义的变量前都要加上final修饰,使之成为常量(没有final修饰的是变量,加上final修饰就会变成常量)。 所以接口的属性默认是public static final 常量,且必须赋初值。( final修饰就是保证接口定义的常量不能被实现类去修改,如果没有final的话,由子类随意去修改的话,接口建立这个常量就没有意义了。
-
this: this 这个关键字的最大作用就是让类中的一个方法,访问该类里的另一个方法或变量,
-
实体类别: Entity接近原始数据,Model接近业务对象~ Entity:是专用于EF的对数据库表的操作, Model:是为页面提供数据和数据校验的,所以两者可以并存 POJO:POJO是Plain OrdinaryJava Object的缩写不错,但是它通指没有使用Entity Beans的普通java对象,可以把POJO作为支持业务逻辑的协助类。
-
面向对象
- 面向对象设计:易于扩展、可复用、易维护、易构建复杂系统 (继承 支持了 复用,多态 支持了 扩展,封装 支持了 构建维护复用)
- “进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开。”
- 面向对象的一个主要特性就是隐藏实现(不去暴露非必要暴露的对象成员),即一个对象的成员的可访问范围是必须要进行控制的,而公开的通常是方法,通常的做法是将对象属性私有,通过 get、set 方法来获得对象的属性。
- 面向对象设计一条基本的准则是“为状态的变化使用数据成员,为行为的变化使用多性形”。(例如用属性记录图形的长宽高或直径,用多形性来指定画圆形还是画方形)
- 记住多形性只能通过方法调用才能表现出来
- “多形性”(Polymorphism)从另一个角度将接口从具体的实施细节中分离出来,亦即实现了“是什么”与“怎样做”两个模块的分离。
- “Upcasting”(上溯造型)
- 我们将从一个 衍生类 句柄转换成一个 基础类 句柄的行为叫作“上溯造型”
- 把衍生类型(子类)当作它的基本类型(父类)处理的过程叫作“Upcasting”(上溯造型)。
- “下溯造型”(Downcasting)
- 继承、重载(overloaded )、重写、动态绑定
- 泛型
- 复用约束
- 示例:集合的泛型方法
- 论合成与继承
- 如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择合成。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的private对象。
- “属于”或者“类似”关系是用继承来表达的,而“包含”关系是用合成来表达的。
- 继承 用来表达同一个系列不同种对象的行为间的差异。
- 句柄在运行期间可以重新与一个不同的对象绑定或结合起来,这样一来,我们在运行期间 通过改变句柄绑定的子类类型 就获得了很大的灵活性。与此相反,我们不能在运行期间换用不同的形式来进行继承;它要求在编译期间完全决定下来。
-
Logger 大家不要再在方法里写:System.out.println(“查询到的储位列表数据:” + list); 这个很耗费系统性能,且不易维护。 可以用如下方式代替:
1)、可以在类里声明一个 Logger 对象: Logger logger = LoggerFactory.getLogger(WmsStorageController.class);
2)、在需要控制台进行输出处: logger.info(“查询到的储位列表数据1: {}",list); logger.error(“查询到的储位列表数据2: {}” , list); logger.debug(“查询到的储位列表数据3: {}",list); info、error、debug 表示不同的日志输出等级
这样我们就可以通过 logback-spring 、application.yml 配置文件来统一设定维护输出信息
-
Code Review
-
CI 持续集成(Continuous Integration)
- 持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。持续集成是启动管道的环节(尽管某些预验证 —— 通常称为上线前检查pre-flight checks —— 有时会被归在持续集成之前)。
- 持续集成的目标是快速确保开发人员新提交的变更是好的,并且适合在代码库中进一步使用。
- 持续集成是如何工作的:持续集成的基本思想是让一个自动化过程监测一个或多个源代码仓库是否有变更。当变更被推送到仓库时,它会监测到更改、下载副本、构建并运行任何相关的单元测试。
- 目前,监测程序通常是像 Jenkins 这样的应用程序,它还协调管道中运行的所有(或大多数)进程,监视变更是其功能之一。监测程序可以以几种不同方式监测变更。这些包括:
- 轮询:监测程序反复询问代码管理系统,“代码仓库里有什么我感兴趣的新东西吗?”当代码管理系统有新的变更时,监测程序会“唤醒”并完成其工作以获取新代码并构建/测试它。
- 定期:监测程序配置为定期启动构建,无论源码是否有变更。理想情况下,如果没有变更,则不会构建任何新内容,因此这不会增加额外的成本。
- 推送:这与用于代码管理系统检查的监测程序相反。在这种情况下,代码管理系统被配置为提交变更到仓库时将“推送”一个通知到监测程序。最常见的是,这可以以 webhook 的形式完成 —— 在新代码被推送时一个挂勾hook的程序通过互联网向监测程序发送通知。为此,监测程序必须具有可以通过网络接收 webhook 信息的开放端口。
-
CD 持续交付(Continuous Delivery)
- 持续交付(CD)通常是指整个流程链(管道),它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本,基本上没有任何人为干预。
- 持续交付在软件开发过程中的目标是自动化、效率、可靠性、可重复性和质量保障(通过持续测试)。
- 持续交付包含持续集成(自动检测源代码变更、执行构建过程、运行单元测试以验证变更),持续测试(对代码运行各种测试以保障代码质量),和(可选)持续部署(通过管道发布版本自动提供给用户)。
-
Java 注解(Annotation) 为对象增加一些元信息
-
微服务
- 根据微服务治理,即使现在 订单、商品 在同一个数据库,假如你当前是订单服务,想查询商品,也要用商品服务提供1的接口,而不是自己直接去查库,用户也是一样,
- 而且接口啥意思?隐藏的实现!是隐藏实现细节!接口啥意思?是将“是什么”与“怎样做”两个模块的分离。
- 作为某个服务对外提供的 工具,你的工具更应该倾向于简单的接口,尽量的轻,尽量的是告知能提供什么信息,尽量的不在工具提供切实实现。(你工具类是作为某个服务的抽象工具,而不是真的像瑞士军刀一样的真实的扳手工具集合)
Java 目标
- Java最终的目标是减轻程序员的负担。
- OOP允许我们根据问题来描述问题。
为了方案的重复使用,我们使用:“继承”、“组织”
- 利用旧有类的方式有两种,一种是通过“继承”,另一种是通过:“组织”(即通过把旧有的类作为属性引入),可以明确的一点是:轻易的使用“继承”,设计将是非常笨拙的,会大大的增加程序的复杂度,利用“组织”则更显简单灵活。
到底选择合成还是继承
- 如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择合成。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的private对象。
- “属于”关系是用继承来表达的,而“包含”关系是用合成来表达的。
- 为判断自己到底应该选用合成还是继承,一个最简单的办法就是考虑是否需要从新类上溯造型回基础类。若必须上溯,就需要继承。但如果不需要上溯造型,就应提醒自己防止继承的滥用。在下一章里(多形性),会向大家介绍必须进行上溯造型的一种场合。但只要记住经常问自己“我真的需要上溯造型吗”,对于合成还是继承的选择就不应该是个太大的问题。
关于第3点:“是否必须上溯造型” 的意思是:是否有要把新类当作现有类看的必要!!!
一、语言基础:
1、Java语言基础(Java 关键字及其特性,Java语法、java.lang 包)、jvm、多线程编程、网络编程
1.1、语言框架:
netty、shrio、RabbitMQ、Quartz、dubbo、mybaitc、spring、springmvc、springboot、springcloud
2、数据结构和算法、操作系统、计算机网络、设计模式
3、Java语言基础 1、关键字及其作用特性 2、面向对象的理解 4、Java多线程 1、虚拟机的内存模型 2、java.util.concurrent、Future 5、jvm 1、《深入理解Java虚拟机》
1、设计模式:《设计模式》,Gang Of Four。四杆老枪的设计模式,教会你一些固定招式应付各种经典场景。
2、JVM:《深入理解 Java 虚拟机》。在早些年,如果你说你懂 JVM 原理,那你就是国内Java顶尖人才了,现如今 JVM 知识已经烂大街,成为面试必备八股文。你需要了解 JVM 如何使用内存,如何 GC,如何调整启动参数,如何查看 dump 文件。
3、网络编程:需要搞懂 HTTP、TCP/IP 协议,了解一根网线如何串起整个网络。
4、分布式系统各种中间件
(1)Dubbo,这是国内最知名的开源项目之一,找一本阿里出的 dubbo 书读。无中心化分布式架构的核心取代了 IBM 的 SOA 产品(中心化架构容易造成性能瓶颈)。
(2)ZooKeeper,推荐读 ZooKeeper 小红书。ZK 是分布式系统数据一致性协调工具。在单机进程中代码执行被认为是完全可靠的,要么执行成功要么执行失败,而到了分布式系统,进程之间网络调用经常会出现超时,出现超时就麻烦了,到底是成功了还是失败了没法简单判断。理解 CAP 理解分布式系统数据的一致性是分布式系统不出错的保障。
(3)Kafka,推荐《Kafka 权威指南》。要理解其为什么那么快又那么可靠又那么大存储空间。这同时也是理解幂等性最方便的系统。
(4)MySQL,假装也是中间件了,推荐《MySQL高性能》,《MySQL 技术内幕:InnoDB 存储引擎》。要了解红黑树和索引的实现方式,了解 InnoDB 存储引擎的工作原理,你才能更好的理解 explain sql 后出来的各种回显结果,从而帮助你更好的调优 SQL。顺便说一句 MyISAM 被废弃了,你可以少看一本书了,偷着乐吧。
(5)nginx。之所以能有多个幂等存在就全靠它了。学习一下它的单线程技术,明明是单线程却能做到高性能。nginx:我就是看不上你多线程,咋啦?唯有真正理解计算机原理才能返璞归真。
(6)Netty,推荐《Netty 权威指南》。在2002之前很多系统都是阻塞 IO,随后的几年中计算机网络突然提速了,这是为什么?2002发布 JDK1.4,2004年出现 Netty,之前大量的计算机网络性能都被阻塞在 IO 上没有被释放,NIO 出现后大幅度提升了 IO 效率。我猜测,在 JDK 支持了 NIO 之后,Tomcat 等 web 容器很快跟进升级,于是全世界在硬件资源没变的情况下网络站点的并发响应能力却大福提升了。
(7)Flume,一个日志收集传输系统。
(8)Protobuf,序列化也是性能中需要重点关注的地方。
(9)Tomcat,太有名了,学学其 classloader 设计思想。
5、JavaEE,一个名存实亡的企业级开发标准,大部分已经被业界抛弃,依然有用的知识,如 servlet,JMX 等。一个时代的落幕,唉。
6、编译原理和操作系统:我假设你上大学的时候学过了,如果没有学过,操作系统至少要读一下,推荐清华大学的本科教材。
7、分布式数据库体系架构,需要掌握分库分表、异构索引、数据库主备等。推荐读一下阿里的 OceanBase,《大规模分布式存储系统:原理解析与架构实战》。另外推荐一本《数据密集型系统设计》,堪称存储设计的通史。
8、Spring 和 Mybatis,掌握使用,能读懂源码更好了。
9、UML 建模,推荐《UML 用户指南》。
SELLER 卖家 BUYER 买家 OTHER 其它 BOX 箱子
PAY 支付 SEND_GOODS 发货 CONFIRM_GOODS 收货 RETURN_GOODS 退货 refund 退款 FEEDBACK 反馈 CHECK 审核
WAIT 等待 PENDING 待确认 PART 部分
OPEN 打开 FINISHED 成功 CLOSED 关闭 CONFIRM 确认 AGREE 同意 REFUSE 拒绝 SUCCESS 成功 CANCEL 取消 FORBID 禁止 ban 禁止
DAMAGED 残损 EXPIRED 过期
review renew logo slogan Subject 主题 Observer 观察者 勿cue SSG(静态站点生成)
NFT SNS(Social Networking Services)——社会性网络服务
Developer Reference Documentation