背景:公司都追求系统的高可用性,这里不可用时间就是其中很重要的一个指标,为此在做系统功能升级迭代的过程中如何快速处理异常恢复正常功能极为重要.现在对新增模块的要求是都增加开关,方便快速关闭异常模块,但是如果开关只是一个配置需要人为手动干预才能达到关闭异常模块的作用,其中远程连接服务器,修改配置文件,重启网站等动作不免要浪费好多的系统不可用时间,因此这里提出一个自动服务降级的想法,在程序出现异常时自动修改功能模块开关关闭异常模块,这样就可以将不可用时间降到最低. 实例:这里以渲染接口日志记录功能异…
Java 接口(英文:Interface) 定义:在JAVA编程语言中,接口是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明. 一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法. 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法. 接口无法被实例化,但是可以被实现:一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类.另外,在…
接口域内部类 接口 描述类具有什么功能,不给出具体实现. 内部类 用于设计协作关系的类集合 代理 实现任意接口的对象. 6.1 接口 接口声明 public interface Comparable { int compareTo(Object other); //接口声明中自动属于public 所以不需要public } 接口声明不能提供的功能 不能含有实例域 不能在接口中实现方法 注意:提供实例域和方法实现的任务应该由接口实现的那个类完成 接口实现 需要完成两点 将类声明为实现给定的接口 使…
一.抽象类 abstract修饰:类和类中的方法 抽象方法:abstract type name(parameter-list);(abstract不能修饰static方法和构造函数) 引用:抽象类有其引用变量,可以引用任何继承了该抽象类的子类的对象,但抽象类不会有实例对象. 继承:子类继承抽象类时,必须实现超类中的所有抽象方法,否则子类仍为抽象类. 成员:抽象类可以有成员变量(接口只能有常量,抽象类可以有常量,也可以有变量),也可以有具体方法(甚至是静态方法). 构造函数:抽象类也有构造函数,…
Set接口: 1.Set接口是不包含重复元素的Collection: 2.set集合没有索引,只能通过增强型for循环或迭代器来遍历: 3.Set接口只包含从collection接口继承的方法,并且增加了禁止重复元素这个限制. Set接口有HashSet类和LinkedHashSet类实现: Set接口的实现类:HashSet类 HashSet类特点:1.无序集合,    2.可以存入空(null)    3.不可以出现重复元素      示例: import java.util.HashSet…
List接口继承自Collection接口,自身具有三大特点: 1.有序集合:存入和取出的顺序一致: 2.此接口的用户可以对每个元素插入位置进行精确控制:可以通过索引操作元素 3.可以存储重复元素 List接口的特有方法: import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /*List接口的特有方法: * 1)add()添加元素 * 2)remove()删除元素 * 3)get()获…
抽象类(abstract) 抽象类概述:一个类被abstract修饰表示这个类是抽象类, 自己定义方法但是不实现方法,后代去实现 抽象方法:   一个方法被abstract修饰表示这个方法是抽象方法 ,抽象方法没有方法体         特点: 1,有抽象方法的类一定是抽象类,抽象类不一定有抽象方法. 抽象类有0-N个抽象方法 2,抽象类不能实例化,意思是不能new一个抽象类 3,凡是继承抽象类的类,必须实现抽象类的方法或者自己也是一个抽象类 4,构造方法和static方法不能是抽象的 下面为一…
List特有的常见方法:有一个共性特点:都可以操作角标 1.添加  void add(int index, E element); void addAll(int index, collection<?> c);2.删除 Object remove(int index);3.修改 Object set(int index, E element);4.获取 Object get(int index); int indexOf(Object o); int lastIndexOf(Object 0…
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储 集合特点: 1.用于存储对象的容器 2.集合长度可变 3.不可以存储基本数据类型 集合体系的顶层Collection接口 Collection接口 |--List:有序(存入和取出的顺序一致),元素都是索引,元素可以重复 |--Vector:内部是数组数据结构,是同步的.增删,查询都很慢(已几乎不用) |--ArrayList:内部是数组数据结构,是不同步的.替代Vector.查询速度快 |--…
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创建抽象类的实例,抽象类里可以有构造方法,但只是用来给子类调用的 抽象类可以包含类的5大要素:成员变量.抽象方法或非抽象方法.构造器.初始化块.内部类(接口.枚举) 抽象方法的来源: 自己定义了一个抽象方法 继承了一个抽象父类,却没有全部实现其抽象方法 实现了一个接口,但没有全部实现其抽象方法 注意区…
引用知乎看到对接口的总结: 接口就是个招牌比如说你饿了,看到前面有个挂着KFC的店,然后你想到可以进去买汉堡了.KFC就是接口,我们看到了这个接口,就知道这个店会卖汉堡(实现接口).那么为什么我们要去定义一个接口,这个店可以直接卖汉堡啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不知道里面卖的是啥.我们可能就要进去问,你这里卖不卖汉堡啊(这就是反射).很显然,这样一家家的问实在是非常麻烦(反射性能很差).我们可能就要记住,XX路XXX号卖汉堡,XX...(硬编码…
特点: 存入元素的顺序   与   取出元素的顺序相同(与LinkedHashSet类似) import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapDemo { public static void main(String[] args) { HashMap<Integer,String>…
1: 接口定义修饰符 interface 接口名{ 常量定义: 抽象方法定义:}修饰符 interface 接口名 extends 父接口表{ 常量定义: 抽象方法定义:}-> 修饰符可以是public 也可以省略具体情况根据编程实际来决定:‘-> 接口只能继承接口2:接口的特征:接口定义的常量属性由于是接口相关的, 接口属性默认为public static final:接口中不能有构造器和初始化快所以定义属性时必须指定其初值:3:接口的使用 接口的实现一个类可以实现多个接口,形式如下修饰符…
系统Ubuntu16.04 LTS 1.开放3306端口查看端口状态:netstat -an|grep 3306tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN目前只有本机可以访问     输入指令:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf如果之前配置过全局配置文件,也可输入指令:sudo vim /etc/mysql/my.cnf修改文件,找到下面那…
在配置mybatis,访问接口提示: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),部分概要信息如下所示: 从报错信息中可知,不是controller的问题,是在调用对应的impl时抛出的异常(汗,截图居然没截到,哈哈哈). 根据提示,最终发现是自己的配置文件中的mapper路径配置错误了(脑抽的配成了绝对路径,狂汗),修改为如下信息后,重新启动后就好了. 顺便说下,在 IDEA中,…
ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象. 该对象主要描述的时候一个servlet的配置信息. 如: <servlet>  配置一个servlet <servlet-name>helloservlet</servlet-name>  指定servlet的名字(任意)  指定servlet具体的类的全限定名(包名.类名) <servlet-class>cn.itcast.servlets.H…
list接口: 泛型:规定list中的元素的类型 /*     *      * 泛型不能使用基本数据类型(可以使用基本类型的包装类)     *      */    public void testBasic() {        //List<int> list = new ArrayList<int>();//会报错的        List<Integer> list = new  ArrayList<Integer>();            …
一.Map接口 Map提供的是key到value的映射.key不能重复,每个key只能映射一个value. 注:重复是指equals,但用equals()方法效率低,所以此处用hashCode()方法比较 key还决定了存储对象在映射中的存储位置,不是由key本身决定,而是通过一种散列技术处理产生的散列码,该散列码作为偏移量,对应分配给映射的内存区域的起始位置.Map集合包括Map接口和Map接口的所有实现类. Map接口中提供了集合的常用方法: 举例1:Map接口中方法的使用 import j…
目录 --- 重写 --- 重载 --- 多态 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能够根据需要实现父类的方法.在面向对象原则里,重写意味着可以重写任何现有方法.实例如下: class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Do…
目录 --- 抽象类 --- 封装 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以…
Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(Hashtable) 属性(Properties) 以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论. 枚举(Enumeration) 枚举(Enumeration)接口虽然它本身不属于数据结构,但它在…
这段日子接手一社区系统的开发.开发过程中感觉到自己接触到的和所作的多是业务逻辑性开发,对java开发到如今还没有一个清晰明白的路线,我越来越感觉到问题的重要性. 问题一:代码仅仅注重了功能实现,对代码性能考虑不周.代码结构混乱.业务代码多不符合SHY原则,导致代码反而处处粘贴.浪费也不少时间,影响了美观性. 问题二:对Java学习还不够系统,对于当中的原理了解的不透彻.知识结构不透彻.无法从全面把握问题. 问题三:工作事情分配上要分清主次,未安排规划,任意性比較大.日后工作要注意简单重要的事首先…
自3月25至今,已经好久没有写学习日志了,今天在写日志抓取合并的小方法,发现抓取后的日志并米有依据系统执行的日志顺序排序.日志抓取排列逻辑如下: 通过日志标识,从各个日志文件(例如 use.log,error.log 等)中获取所需日志列表 合并日志列表 升序排序 输出日志报告 结果最后获取日志信息后,发现实际产出结果与预期结果不相符,如下所示: -- ::, - INFO - [main] [cn.ffp.autotest.api.report.ReportHelper:] - [] 开始生成…
[前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的作用,一般常用的日志框架有: sf4j commons-logging log4j JDK自带logging 其他日志框架 [定义]      记录日志:一般在最开始写代码的时候总是会在代码中加入一些System.out.println方法的语句来观察代码运行的情况.这样需要反复加入和修改,日志AP…
此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!…
第11章 异常,断言,日志,调试 处理错误 捕获异常 使用异常机制的技巧 使用断言 日志 测试技巧 GUI程序排错技巧 使用调试器 11.1 处理错误 11.1.1异常分类 都继承自Throwable类 分成Error和Exception Error类 描述了Java运行时系统的内部错误和资源耗尽错误.应用程序不应该抛出此种类型的错误.如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全地终止外,再也无能为力 Exception层次结构:最需关注的 RuntimeException 程序错…
I/O系统即输入/输出系统,对于一门程序语言来说,创建一个好的输入/输出系统并非易事.因为不仅存在各种I/O源端和想要与之通信的接收端(文件.控制台.网络链接等),而且还需要支持多种不同方式的通信(顺序.随机存取.缓冲.二进制.按字符.按行.按字等). Java类库的设计者通过创建大量的类来解决这个难题,比如面向字节的类(字节流,InputStream.OutputStream).面向字符和基于Unicode的类(字节流,Reader.Writer).nio类(新I/O,为了改进性能及功能)等.…
编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<<Java I/O系统学习系列一:File和RandomAccessFile>>中,我们讲到RandomAccessFile可以写入和读取文件,具备I/O功能,但是其只能针对文件,而I/O还涉及到很多其他场景比如网络.读取内存中的字符串等,所以Java类库中提供了一系列的类库来对其进行支持,也就是…
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类.父类包…
从.Net到Java学习系列目录 最近又撸了半个月的前端代码,做app离线存储,然后又花了一周去将过去的wcf项目转webapi,java又被落下了,总感觉我特么像斗地主中的癞子牌,变来变去..... Spring Data JPA 是Spring Data 的一个子项目,它通过提供基于JPA的Repository极大了减少了操作JPA的代码.我觉得它就是一个封装好了的泛型仓储. 点击JpaRepository进去看下它的源码: @NoRepositoryBean public interfac…