第一种,通过继承Thread(四莱德) 类创建线程-**\
第二种,通过实现Runnable(软德饱)接口创建线程
第三种,通过Callable(靠勒饱)接口创建线程
String、 StringBuffer(斯尊巴菲) 、StringBuilder(斯尊biu德)
如果要操作少量的数据用String
1、Integer是int的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4、Integer的默认值是null,int的默认值是0
相同点
不相同点
面向过程
**优点:**性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
**缺点:**没有面向对象易维护、易复用、易扩展
面向对象
**优点:**易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
**缺点:**性能比面向过程低
主类是Java程序执行的入口点。一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet(阿不雷特)的子类。
应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。
简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。
构造器Constructor(啃抓斯特)不能被继承,因此不能被重写(Override),但是可以被重载(Overload)
重写是子类方法覆盖父类的方法,要求方法名和参数都相同
重载是在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。
**封装是保持程序的高内聚低耦合。封装是把数据的属性私有化,同时提供一些接口方法可以被外界访问。**如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也就没有什么意义。
**继承就是子类继承父类,从父类获取属性和方法,子类可以拥有自己属性和方法,子类可以对父类进行扩展。**继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性地继承父类。通过使用继承我们可以非常方便地复用以前的代码。
子类拥有父类非private的属性和方法。子类可以拥有自己属性和方法,子类可以对父类进行扩展。
3.多态
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。
所谓多态就是指程序中定义的引用变量的指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底就会指向那个类的实例对象,该引用变量发出的方法调用到底是那个类中实现的方法,必须在由程序运行期间才能决定。
在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。
== 号是运算符 equals 是方法 方法可以被重写
==号,它的作用是判断两个对象的地址是不是相等。即,比较的是值是否相等。
equals继承Object类,equals的作用是判断两个对象,字符串是否相等
面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?”
为什么要有hashCode
我们以“HashSet如何检查重复”为例子来说明为什么要有hashCode:
当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他已经加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的Java启蒙书《Head fist java》第二版)。这样我们就大大减少了equals的次数,相应就大大提高了执行速度。
hashCode(哈希可漏特)介绍
散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)
equals介绍
先看下java中的编译器和解释器:
Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。
编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为 .class的文件),它不面向任何特定的处理器,只面向虚拟机。
每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。这也就是解释了Java的编译与解释并存的特点。
Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。
解释型和编译型主要是翻译的时机不同
Java通过字节码的方式,在一定程度上解决了解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
成员变量在类内部起作用,局部变量只在它的作用域起作用
2、在内存中的位置不同:成员变量:在堆内存。 局部变量:在栈内存。
3、生命周期不同:成员变量:随着对象的创建而存在,随着对象的消失而消失。 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。
4、初始化值不同:成员变量:有默认值初始化。局部变量:没有默认值初始化,必须定义,赋值,然后才能使用。
new运算符。
对象实体:就是类的这时体现,每个对象都是独立的内存。
引用就是表示的对象所在内存的位置。其实就是对象的线索。
new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球)。
方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用:接收出结果,使它可以用于其他的操作!
对象的相等比的是内存中存放的内容是否相等。
引用相等比较的是他们指向的内存地址是否相等。
值传递是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。(因为值传递的时候,实际上是将实参的值复制一份给形参。)
引用传递对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。外部对引用对象的改变会反映到所有的对象上。(因为引用传递的时候,实际上是将实参的地址值复制一份给形参。)
**线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。**与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。
进程是程序的一次执行过程,是系统运行程序的基本单位,进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。
Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能称为Java 的反射机制。
是一套构建用户界面的渐进式框架。
Vue是前端框架
Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
当项目庞大的时候使用它:
需要动态的注册响应式数据;
需要命名空间 namespace(name斯杯次) 来管理组织我们的数据;
希望通过插件,来更改记录;方便测试;以上这些需要和希望,都是我们 vuex 需要做的一些事情。
什么是vue生命周期?
答: Vue 实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂载Dom(稻姆)→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。
Redis 是一个高速缓存数据库。
Redis 使用场景:
· 缓存近期热帖;
· 记录用户会话信息。
· 数据缓存功能
· 分布式锁的功能
· 支持数据持久化
· 支持事务
· 支持消息队列
缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。
Redis 支持的数据类型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(认特)(有序集合)。
主要是:解耦、异步、削峰。
(1)解耦:
就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦。
(2)异步:,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求。如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms。
·**抢购活动,**削峰填谷,防止系统崩塌。
·延迟信息处理,比如 10 分钟之后给下单未付款的用户发送邮件提醒。
·解耦系统,对于新增的功能可以单独写模块扩展,比如用户确认评价之后,新增了给用户返积分的功能,这个时候不用在业务代码里添加新增积分的功能,只需要把新增积分的接口订阅确认评价的消息队列即可,后面再添加任何功能只需要订阅对应的消息队列即可。
·****订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
·库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作
**·**Collection:
·List
·ArrayList
·LinkedList
·Vector
·Stack
·Set
·HashSet
·LinkedHashSet
·TreeSet
**·**Map:
·HashMap
·LinkedHashMap
·TreeMap
·ConcurrentHashMap
·Hashtable
反射是java被视为动态语言的关键,反射机制允许程序在执行期借助于反射 API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法
Java反射机制主要提供了以下功能:
概述
内存泄露就是堆内存中不再使用的对象,但是垃圾回收期无法从内存中删除他们的情况,因此他们会被不必要的一直存在。,这种情况会耗尽内存资源并降低系统性能,最终以OOM终止。
虽然Java有垃圾收集器帮助实现内存自动管理,虽然GC有效的处理了大部分内存,但是并不能完全保证内存的不泄露。
负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。
静态负载均衡算法包括:轮询,比率,优先权。
**动态负载均衡算法包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,**动态服务器补充,服务质量,服务类型,规则模式。
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,**可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。**servlet的作用的处理客户端的请求并将其结果发送到客户端
Servlet的生命周期包含了下面4个阶段:
1.加载和实例化
2.初始化
3.请求处理
4.服务终止
在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。
**当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。**它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
3、拦截器只能对action(艾克森)请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
hash的基本概念就是把任意长度的输入通过一个hash算法之后,映射成固定长度的输出。
HashMap是一个用于存储Key-Value(k歪6)键值对的集合,每一个键值对也叫做Entry(嗯脆)。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。对于HashMap,最常使用的是两个方法:Get和Put。
特性
2.非同步,线程不安全。
3.底层是hash表,不保证有序(比如插入的顺序)
对key的hashCode进行hashing,与运算计算下标获取bucket位置,如果在桶的首位上就可以找到就直接返回,否则在树中找或者链表中遍历找,如果有hash冲突,则利用equals方法去遍历链表查找节点。
基于hashing(哈森)的原理,jdk8后采用数组+链表+红黑树的数据结构。通过put(泼特)和get存储和获取对象。当我们给put()方法传递键和值时,先对键做一个hashCode(哈希可漏特)的计算来得到它在bucket(掰K特)数组中的位置来存储Entry(恩吹)对象。当获取对象时,通过get获取到bucket()的位置,再通过键对象的equals(一可劳斯)方法找到正确的键值对,然后在返回值对象。
好的Hash算法可以出计算几乎出独一无二的HashCode,如果出现了重复的hashCode,就称作碰撞;
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。
public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true。
HashMap
HashSet
HashMap实现了Map接口
HashSet实现了Set接口
HashMap储存键值对
HashSet仅仅存储对象
使用put()方法将元素放入map中
使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值
HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
HashMap比较快,因为是使用唯一的键来获取对象
HashSet较HashMap来说比较慢
接下来我们就来看几个常见的处理目录的命令吧:
你可以使用*man [命令]*来查看各个命令的使用文档,如 :man cp。
查看进程(例:如何查看所有xx进程)
ps -ef grep(格瑞普 )表示查看全格式的全部进程标准的格式显示进程
ps -aux(奥斯)grep查询内存中进程信息;BSD的格式来显示
ps-ef是查看所有的进程的 然后用grep筛选出你要的信息
top(塔普) 查看内存中进程的动态信息;
杀掉进程
kill -9 pid 杀死进程
查看日志
tail -n 10 test(泰丝).log 查询日志尾部最后10行的日志;
查看端口:(如查看某个端口是否被占用)
netstat(耐斯达) -anp | grep 端口号(状态为LISTEN(嘞森)表示被占用)
答案:为了停止正在运行的进程,让其在后台(挂起),我们可以使用组合键 Ctrl+Z。
答案:‘syslogd’(塞斯劳特),它负责跟踪系统信息,并将跟踪日志存储在特定的日志文件里。
答案:使用’tar -tvf’。选项 t(显示内容)v(详细报告tar处理的文件信息)f(使用档案文件或者设备)
第一范式:原子性 保证每一列不可再分
第二范式:每张表只描述一件事情
事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就是没读到,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
事务隔离级别
脏读
不可重复读
幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)
关系性数据库需要遵循ACID规则,具体内容如下:
SELECT FLOOR(福漏尔)(9.4); /向下取整/
SELECT CEILING(森令)(9.4);/向下取整/
SELECT ABS(-8); /绝对值/
四种整数类型(byte(佰特)、short(嗖特)、int、long(浪)):
byte:8位,用于表示最小数据单位,如文件中数据,-128~127
short:16位,很少用,-32768 ~ 32767
int:32位、最常用,-231-1~231 (21亿)
long:64位、次常用
两种浮点数类型(float(福楼特)、double(大饱)):
float:32位,后缀F或f,1位符号位,8位指数,23位有效尾数。
double:64位,最常用,后缀D或d,1位符号位,11位指数,52位有效尾数。
一种字符类型(char(叉)):
char:16位,是整数类型,用单引号括起来的1个字符(可以是一个中文字符),使用Unicode码代表字符,0~2^16-1(65535)。
一种布尔类型(boolean):true真 和false假。
创建数据库 : create database [if not exists] 数据库名;
删除数据库 : drop database [if exists] 数据库名;
查看数据库 : show databases;
使用数据库 : use 数据库名;
select count()(康特)列名 from 表名group by having count()>15【大于15的人数】
select 列名 from 表名 inner join 表名 on连接条件(多表联查)
查询表:select * from 表名
模糊查询:select 列名 from 表名 where 列名 like_%
增加数据:INSERT INTO 表名[(字段1,字段2,字段3,…)] VALUES(‘值1’,‘值2’,‘值3’)
更新数据:UPDATE 表名 SET 列名 = ‘更新值’ WHERE 更新条件
删除数据:DELETE FROM 表名 WHERE 删除的数据 如id=‘1’
注意:condition(肯嘚森)为筛选条件 , 如不指定则删除该表的所有列数据
游标是从多条数据记录的结果集中每次提取一条记录的机制。游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。游标充当指针的作用。 尽管游标能遍历结果中的所有行,但他一次只指向一行。
CREATE(酷睿特)创建
索引的作用
分类
索引准则
索引的数据结构
主键索引
主键 : 某一个属性组能唯一标识一条记录
特点 :
唯一索引
作用 : 避免同一个表中某数据列中的值重复
与主键索引的区别
常规索引
作用 : 快速定位特定数据
注意 :
全文索引
百度搜索:全文索引
作用 : 快速定位特定数据
注意 :
spring理念使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架
优点
1、Spring是一个开源免费的框架 , 容器 .
2、Spring是一个轻量级的框架 , 非侵入式的 .
3、控制反转 IoC , 面向切面 Aop
4、对事物的支持 , 对框架的支持
一句话概括:
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
简单来说,控制指的是当前对象对内部成员的控制权;控制反转指的是,这种控制权不由当前对象管理了,由其他类或第三方容器来管理。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。
控制反转IoC,是一种设计思想。在没有IoC的程序中 , 我们使用面向对象编程 , 程序的创建与对象间的依赖关系完全在程序中,如果用了ioc使用set方法进行注入,控制反转后将对象的创建转移给第三方,所谓控制反转就是:获得依赖对象的方式反转了。
AOP就是在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
简单来说就是统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等。
1.方便解耦,便于开发(Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理)
3.方便集成各种优秀的框架
@Component用于泛指组件(啃跑内特)
@Autowired自动装配(凹凸外)
@Qualifier限定符
@Scope作用域(是勾普)
@Controller控制器(啃搓乐)
@Service用于标注业务层组件(涩为斯)
@Repository用于标注数据访问组件(瑞帕斯翠)
你可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功夫。
@Repository用于标注数据访问组件(瑞帕斯翠)
@Service用于标注业务层组件(涩为斯)
@Component用于泛指组件(啃跑内特)
@ComponentScan用于组件扫描等等(啃跑耐斯但)
Spring MVC是一个基于Java的实现了MVC设计模式的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
特点:
约定优于配置
与spring兼容性非常好
答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。
其主要就完成2件事情:封装JDBC操作,利用反射打通Java类与SQL语句之间的相互转换。
MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,方便地写出SQL和方便地获取SQL的执行结果。
MyBatis的缓存分为一级缓存**(本地缓存)和二级缓存(全局缓存)****,一级缓存放在session(嗮森)里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable**(C瑞来斯煲)序列化接口(可用来保存对象的状态),可在它的映射文件中配置
二级缓存(全局缓存):
二级缓存是 mapper 级别的缓存,多个sqlSession去操作同一个Mapper(卖播)的sql,不管Sqlsession(色扣色神) 是否相同,只要 mapper 的 namespace(内幕是被)相同就能共享数据。也可以称之为 namespace 级别的缓存 。
答:
1 Mybatis使用RowBounds(肉~邦斯)对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。
2 分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。
举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10
CSS指的是层叠样式表 它是一种用来表现HTML或XML等文件样式的计算机语言
HTML代表超文本标记语言它不是一种编程语言,而是一种标记语言,是网页制作所必备的。
行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
行内元素:a span(斯盼) img input(因不特) select(斯莱克特)
块级元素:div ul ol li dl dt dd h1 p
空元素:<br> <hr> <link>(林克) <meta>(迈塔)
a是超链接 br是换行 hr是一条线 img是图片 h1是标题 p是段落
jQuery 库中的 $() 是什么?
$() 函数用于将任何对象包裹成 jQuery 对象,接着你就被允许调用定义在 jQuery 对象上的多个不同方法。
他是指一种创建交互式网页的网页开发技术,最大的特点是可以实现局部刷新。
同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
异步方法一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。同步是在一条直线上的队列,异步不在一个队列上 各走各的不会阻碍调用者的工作。(异步不必等待,一般需要监听异步的结果)
git是一种分布式的版本管理系统
基本命令
add(艾特) 添加到暂存区
commit(科密特)提交到本地仓库
push(普斯)提交到远程
clone(克咯)克隆
初始化:创建一个git仓库,创建之后就会在当前目录生成一个.git的文件
git init
添加文件:把文件添加到缓冲区
git add filename
添加所有文件到缓冲区(从目前掌握的水平看,和后面加“.”的区别在于,加all可以添加被手动删除的文件,而加“.”不行):
git add .
git add --all
删除文件
git rm filename
在学习 MySQL 的过程中,可能你了解过触发器的概念,不清楚各位是否有详细的去学习过触发器,最近看了几篇关于触发器的文档,分享下 MySQL 触发器相关知识。1.触发器简介触发器即 triggers ,它是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, up
本文归纳在ComfyUI工具中【触发词】的概念、作用及意义。
# Bartender Java触发器的使用Bartender是一款强大的标签和条码打印软件,它不仅支持各种打印格式,还能够通过脚本编程实现灵活的功能扩展。Bartender提供了Java触发器的功能,使开发人员能够使用Java代码在标签打印时执行特定的操作。本文将介绍如何使用Bartender的Java触发器,包括示例代码和实际应用场景。## 什么是Java触发器?Java触发器指的
# Java触发get set在Java编程中,我们经常会使用get和set方法来访问和修改对象的属性。这两种方法是Java编程中的一种规范,用于封装数据和控制对数据的访问。本文将介绍什么是get和set方法,以及如何触发它们。## get和set方法的作用在面向对象编程中,我们通常会将对象的属性定义为私有(private),这样可以避免直接访问和修改对象的属性。但是,有时候我们仍然需
# Java 中的 Getter 和 Setter 方法对 Bean 的影响在 Java 中,Bean 是一个用于封装数据的标准组件,它通常包含私有属性及其对应的公共 getter 和 setter 方法。通过这些方法,我们可以安全地访问和修改 Bean 的属性。在某些情况下,我们可能需要在这些方法中添加监听逻辑,以便在属性被访问或修改时执行某些操作。接下来,我将为你讲解如何实现这个过程。
# Java 触发机制详解## 引言在现代应用程序的开发中,触发机制是一个非常重要的概念。特别是在Java编程中,触发机制通常意味着某些条件或事件引发某些操作的执行。这种机制在数据库、事件处理和应用程序逻辑中得到了广泛应用。在本文中,我们将深入探讨Java中的触发机制,并通过实例代码和序列图来更好地说明这些概念。## 1. 什么是触发机制?触发机制可以简单理解为“事件驱动”的能力。
适配器模式适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。我们通过下面的实例来演示适配器模式的使用。其中,音
本文实例讲述了Python使用time模块实现指定时间触发器。分享给大家供大家参考,具体如下:其实很简单,指定某个时间让脚本处理一个事件,比如说一个get请求~任何语言都会有关于时间的各种方法,Python也不例外。help(time)之后可以知道time有2种时间表示形式:1、时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。2
概述今天主要分享下GC相关概念,为啥要讲GC呢?因为作为运维,很多时候系统都会报错内存溢出之类,而这时候都不知道源头在哪?学习一下GC的机制及Minor GC和Full GC触发条件还是有用的。GC机制GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开
一. 基础1.1 水平触发基本概念读缓冲区不为空时, 读事件触发。写缓冲区不为满时, 写事件触发。处理流程accept新的连接, 监听读事件。读事件到达, 处理读事件。需要写入数据, 向fd中写数据, 一次无法写完, 开启写事件监听。写事件到达, 继续写入数据, 写完后关闭写事件。优缺点不会遗漏事件, 易编程。长连接需要写入的数据量大时, 会频繁开启关闭写事件。1.2 边沿触发基本概念读缓冲区状态
一、Java 基础1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很
JAVA的垃圾回收机制 GC通过确定对象是否被活动对象引用来确定是否收集该对象。 2.1 触发GC(Garbage Collector)的条件 1)GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。但下面的条件例外。 2)Java堆内存不足时,GC会
HTTP请求方法并不是只有GET和POST,只是最常用的。据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。官方定义 OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决
html标签是有子和父的,这个时候就出现了事件触发顺序的问题,比如:<!DOCTYPE html><html><head><style>.first{border:solid #FF0000}.second{border:solid #00FF00}.third{border:solid #0000FF}</style
Button类可通过JavaFX API让用户通过点击一个按钮来处理某个行为。Button类是Labeled 类的子类,它可以显示文本、图片(当然也可以同时显示二者)。Figure 3-1展示了具有各种效果的按钮。通过本文你就能学会怎么创建这样的按钮。创建按钮 在JavaFX应用中有三种Button类的构造方法创建 Button 控件,见Example 3-1 .
事件模型Edge Triggered (ET) 边缘触发只有数据到来,才触发,不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会触发。首先介绍一下LT工作模式:LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作
Button类的函数 public void addActionListener(ActionListener) ,调用该方法可以向按钮增加动作监视器; public void removeActionListener(ActionListener)调用该方法可以移除按钮上的动作监视器。 eg. 如下,求textFie
GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。GC机制要准确理解Java的垃圾回收机制,就要从:“什么时候”,“对什么东西”,“做了什么”三个方面来具体分析。第一:“什么时候”即就是GC触发的条件。GC触
狸花猫权限管理系统(LiHua)基于SpringBoot和Vue构建,其前端交互体验通过精心设计的过渡动画系统实现了界面元素的平滑切换。本文将深入解析系统中8种核心过渡动画的实现原理、应用场景及自定义方案,帮助开发者掌握企业级应用的动画设计精髓。## 动画系统架构概览狸花猫前端动画系统采用模块化设计,通过CSS过渡类与Vue过渡组件的深度结合,实现了一致且可扩展的动画效果体系。核心架构包含...
目录①computed是计算属性:一般是没有这个值的但是想要用这个值,那么要根据已有的去做计算②watch 是监视属性:一般监视属性,监视的数据一定是已经存在并且可以改变的③能用computed的 都能用watch,但是能用watch解决的computed不一定能解决④区别: computed函数当中只能使用同步,而watch当中可以是同步也可以是异步一:computed计算属性二:wa
@RequestBody是Spring MVC中处理HTTP请求体的核心注解,它能自动将JSON/XML等格式的数据反序列化为Java对象。本文详细解析了其工作原理(基于HttpMessageConverter机制)、典型应用场景(如用户注册、商品更新接口)以及最佳实践,包括参数校验、异常处理和安全考量。通过源码分析和实际案例,帮助开发者掌握这一关键注解的正确使用方法,提升RESTful API开发效率与健壮性。文章最后还提供了常见问题排查方案和性能优化建议。
SpringBoot自动装配源码解析要想了解自动装配原理首先需要了解@SpringBootApplication这个注解进入这个注解内部可以看到如下自动装配的实现离不开@EnableAutoConfiguration这个注解@SpringBootConfiguration说明该启动类是一个配置类进入@EnableAutoConfiguration这个注解中又导入了AutoConfiguration