18.Java基础之注解Annotation
吴山青,越山青。两岸青山相送迎。谁知离别情?
——林逋《长相思》
Java基础之注解Annotation1. 注解 (Annotation) 概述
从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是Annotation(注解)。
Annotation 其实就是代码里的 特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
Annotation 可以像修饰符一样被使用, 可用于 修饰包, 类, 构造器, 方法, 成员变量, 参数, 局部变量的声明, 这些信息被保存在 Annotation的 “name=value” 对中。
在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。 ...
18.MySql高级之主从复制
何日请缨提锐旅,一鞭直渡清河洛。却归来、再续汉阳游,骑黄鹤。
——岳飞《满江红》
MySql高级之主从复制1. 复制概述
复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。
2. 复制原理MySQL 的主从复制原理如下。
从上层来看,复制分成三步:
Master 主库在事务提交时,会把数据变更作为时间 Events 记录在二进制日志文件 Binlog 中。
主库推送二进制日志文件 Binlog 中的日志事件到从库的中继日志 Relay Log 。
slave重做中继日志中的事件,将改变反映它自己的数据。
3. 复制优势
MySQL 复制的有点主要包含以下三个方面:
主库出现问题,可以快速切换到从库提供服务。
可以在从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力。
可以在从库中执行备份,以避免备份期间影响主库的服务。
4. 搭建 ...
18.查找算法之斐波那契查找
1. 斐波那契查找算法1.1 斐波那契(黄金分割法)查找基本介绍
黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。
斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分割值0.618
1.2 斐波那契(黄金分割法)原理
斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置,mid 不再是中间或插值得到,而是位于黄金分割点附近,即 mid=low+F(k-1)-1(F 代表斐波那契数列),如下图所示
1.2.1 对 F(k-1)-1 的理解
由斐波那契数列 F[k]=F[k-1]+F[k-2] 的性质,可以得到 (F[k]-1)=(F[k-1]-1)+(F[k-2]-1)+1 。该式说明:只要顺序表的长度为 F[k]-1,则可以将该表分成长度为 F[k-1]-1 和 F[k-2]-1 的两段,即如上图所示 ...
19.Java基础之反射
七八个星天外,两三点雨山前。
——辛弃疾《西江月》
## Java基础之深入理解反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
下面我们定义一个MainReflect类来学习反射,其学习前的MainReflect代码如下:
12345678910111213141516171819202122/** * @Date 2020/6/28 17:27 * @Version 10.21 * @Author DuanChaojie */public class MainReflect { private static String id = "1015"; public static String name = "dd"; public static void main(String[] args){ } pub ...
19.数据结构之哈希表
数据结构之哈希表1. 哈希表的基本介绍 散列表(Hashtable,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
2. 需求分析
哈希表(散列)-Google 上机题
有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址..),当输入该员工的id时,要求查找到该员工的 所有信息。
要求: 不使用数据库,尽量节省内存,速度越快越好—>哈希表(散列)
添加时,保证按照 id 从低到高插入 [课后思考: 如果 id 不是从低到高插入,但要求各条链表仍是从低到高,怎么解决?]
使用链表来实现哈希表, 该链表不带表头[即: 链表的第一个结点就存放雇员信息]
3. 代码实现3.1 构建Emp类123456789101112131415161718192021/** * 雇员类 * * @author DuanChaojie * @date 2020年3月12日 下午6:27:10 ...
2.JVM架构及其生命周期
汗血盐车无人顾,千里空收骏骨。
——辛弃疾《贺新郎》
JVM架构及其生命周期1. JVM的整体架构
HotSpot VM是目前市面上高性能虚拟机的代表作之一。
它采用解释器与即时编译器并存的架构。
在今天,Java程序的运行性能早己脱胎换骨,已经达到了可以和c/C++程序一较高下的地步。
2. Java代码执行流程
3. JVM的架构模型
Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。这两种架构之间的区别:
基于栈式架构的特点
设计和实现更简单,适用于资源受限的系统;
避开了寄存器的分配难题–使用零地址指令方式分配。
指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。
不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点
典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
指令集架构则完全依赖硬件,可移植性差;
性能优秀和执行更高效;
花费更少的指令去完成一项操作。
在大部分情况下,基于寄存器架构的指令集往往都以一地址指令 ...
2.JavaSE-线程池
了却君王天下事,赢得生前身后名。可怜白发生!
——辛弃疾《破阵子》
线程池☆1.1 线程池思想概述
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。
那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。
1.2 线程池概念
线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
由于线程池中有很多操作都是与优化资源相关的,我们在这里就不多赘述。我们通过一张图来了解线程池的工作原理:
合理利用线程池能够带来三个好处:
降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
提高响应速度。当任务到达时,任务可以不需要的等待线程创建就能立即执行。
提高线程的可管理性。可以根据系统的承受能力,调 ...
2.Java集合基础之Iterator迭代器
往事悠悠君莫问,回头。槛外长江空自流。
——王安石《南乡子》
## Java集合基础之Iterator迭代器
1. Iterator 接口
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。
Iterator 接口也是Java集合中的一员,但它与 Collection 、 Map 接口有所不同,Collection接口与Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection中的元素,因此Iterator对象也被称为迭代器。
想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:
~~~~java// 获取集合对应的迭代器,用来遍历集合中的元素的。// Collection接口中的抽象方法Iterator iterator();// 可以通过list.iterator()拿到list集合对应的迭代器。
1234567891011121314155. **迭代 ** :即**Collection**集合元素的通用获 ...
2.MySql高级之视图
花似伊,柳似伊。花柳青春人别离。
——欧阳修《长相思》
## MySql高级之视图
1. 视图概述
视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
视图相对于普通的表的优势主要包括以下几项。
简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
2. 创建或者修改视图123456789101112131415161718192021222324252627#创建视图的语法为:create [or replace] [algorit ...
2.jQuery常用方法
[toc]
前端–jQuery常用方法1. 表单元素设置和读取属性的方法
checked,selected,disabled 要用prop函数来读取和设置值,千万不要用attr。
attr能做的事情,prop都可以做。以后开发的时候,设置和获取属性值,用prop函数。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="UTF-8"> <title>表单元素设置和读取属性的方法</title> <style> * { margin: 0; ...