阶段总结 - 一些不得不知道的Java知识点

JVMjava

  JVM优化?mysql

  JVM内存模型?全部jdk版本的模型都同样吗?redis

  对JVM的了解?算法

    JVM内存分配?spring

    GC 是在何时?对什么东西?作了什么事情?sql

分布式、集群数据库

  作一个分布式事务怎么作?编程

  实现分布式锁怎么实现后端

  redis如何保证热点数据?设计模式

  缓存

  序列化

  数据库锁

Mybatis

  #{}和${}区别

  数据库事务

Spring Boot

  springBoot自动配置原理

  @RestController

  Spring 关于iOC容器 特色

  Spring MVC 流程图

redis

  如何手动持久化

  Memcached、Redis、MongoDB 对比

  redis遍历全部key的两个命令 keys scan

    keys

    scan

mysql

  索引分类

  索引类型

  建索引原则:

页面访问慢怎么排查

  慢查询sql优化基本步

HashMap 和 HashTable区别?

ArrayList 与LinkedList 区别

说说知道的设计模式?

多线程状态?

volatile 关键字

NIO 与 BIO 区别?那个更快。

HTTP协议

  经常使用HTTP方法有哪些

  GET与POST区别

  HTTP请求报文与相应报文格式

  HTTP请求

  常见HTTP状态码

  HTTP的缺点与HTTPS

  HTTP优化

  GET 下URL地址最大长度

搜索引擎

HQL

 

JVM

JVM优化?

查看堆空间大小分配(年轻代、年老代、持久代分配)

垃圾回收监控(长时间监控回收状况)

线程信息监控:系统线程数量

线程状态监控:各个线程都处在什么样的状态下

线程详细信息:查看线程内部运行状况,死锁检查

CPU热点:检查系统哪些方法占用了大量CPU时间

内存热点:检查哪些对象在系统中数量最大

 

堆设置

回收器选择 (jdk 5前使用串行收集器,以后根据系统配置智能判断。)

收集器有三种:串行、并行、并发收集器

串行收集器适用于 小数据量 的状况

并行收集器适用于 吞吐量 优先的状况

并发收集器适用于 响应时间 优先的状况

 

JVM优化原则:

尽可能减小 youngGC 、尽可能减小 fullGC、缩短大对象生命周期,替换收集器、

 

JVM内存模型?全部jdk版本的模型都同样吗?

内存模型:java虚拟机栈、本地方法栈、程序计数器、堆、方法区

(线程共享:方法区、堆; 线程独享:java虚拟机栈、本地方法栈、PC寄存器)

jdk 1.7 有永久代的概念。

jdk 1.8 取消永久代,添加了元空间。

元空间的本质和永久代相似,都是JVM规范中方法区的实现。不过元空间与永久代之间最大区别在于:元空间并不在虚拟机中,而是使用本地内存。默认状况下,元空间的大小仅受本地内存限制。

 

对JVM的了解?

JVM内存分配?

Java虚拟机栈、本地方法栈、堆、方法区、程序计数器。

程序计数器当前线程所执行的字节码的行号指示器(线程私有区域,惟一没有任何OOME状况的区域)

java虚拟机栈:java方法执行的内存模型(线程私有,生命周期与线程相同。)

本地方法栈:线程建立时产生,方法执行时生成栈帧(为Native方法服务)

方法区(持久代):存储类信息、静态变量、常量等。区域用完,会抛出OutOfMemoryError。

:java代码中全部new操做

 

 

 

GC 是在何时?对什么东西?作了什么事情?

时间:

Eden(新生代) 满了,触发 minor gc (新生代GC | 会致使全世界暂停,中止应用程序的线程,过程很短暂),

升到老年代的对象大于老年代剩余空间,触发 full gc,或者小于时 被 HandlePromotionFailure(HandlePromotionFailure 参数配置是否容许担保失败,若是容许,进行minor gc,不容许,进行 full gc) 参数强制 full gc;

gc 与 非gc 时间耗时超过了 GCTimeRatio(设置吞吐量大小) 的限制引起OOM(OutOfMemory)

调优 -- 经过NewRatio控制新生代老年代比例,经过MaxTenuringThreshold 控制进入老年前生存次数等。

对什么东西:

从gc root(垃圾回收的根)搜索不到,并且通过第一次标记、清理后、仍然没有复活的对象。

作了什么事情:

新生代是复制清理,

新生代区有 Survivor Space 幸存者区,包含 To Survivor、 Form Survivor,两个区域空间同样大,垃圾回收时把不能回收的对象都放到 To Survivor中,结束后把To Survivor里的内容都放到 Form Survivor内。

老年代是标记清理,标记清理后须要作整理,也有直接的标记整理算法。

复制清理须要较大内存,标记清理收集后有大量空间碎片。

 

分布式理论:CAP定理、BASE理论

CAP - 一致性C、可用性A、分区容错性P

BASE - 基本可用BA、软状态S、最终一致性E

 

分布式、集群

分布式是个工做方式,集群是个物理形态

 

·分布式系统

分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像是单个相关系统。

 

·分布式系统核心本质

拆分 :根据业务需求、成本限制。

链接 :拆分后Process之间要能通讯

 

·为何要使用分布式

性能扩展 : 系统高负载,单机没法承受,经过使用多台机器提升系统的负载能力

加强可靠性 :为了不故障,须要将业务分散开保留必定的冗余

 

·集群

将相同的程序,经过不断横向扩展,以提升服务能力的方式。

 

作一个分布式事务怎么作?

1)两阶段提交(2PC):

优势:尽可能保证了数据的强一致,适用数据强一致性要求很高的领域

缺点:实现复杂,牺牲可用性,对象能影响大,不适合高并发性能场景。

 

2)补偿事务(TCC):针对每一个操做,都要注册一个与其对应的确认和撤销操做。

分三步 -- try阶段,对业务系统作检测及资源预留

Confim阶段,对业务系统作确认提交。try阶段成功,默认认为confim阶段也成功。

cancel阶段,在业务执行错误,须要回滚状态下,执行业务取消,预留资源释放。

优势:比2pc,实现流程简单,数据一致性不如2pc

缺点:二、3步可能失败,业务流程不太容易定义。

 

3)本地消息表(异步确保)

将分布式事务拆分红本地事务进行处理。

消息生产方,须要额外建一个消息表,并记录消息发送状态,消息表和业务数据在一个事务里提交,而后消息会通过mq发送到消息的消费方,若是消息发送失败,会进行重试发送。

消息消费方,须要处理这个消息,并完成本身的业务逻辑,若是本地事务处理成功,代表已经成功,若是处理失败,会重试执行。若是业务失败,会给生产方发送一个业务失败消息,通知生产方回滚。

优势:经典的实现,避免分布式事务。实现最终一致性

缺点:消息表会耦合到业务中。

 

4)MQ事务消息

RocketMQ 支持,RabbitMQ和Kafka不支持

使用阿里中间件 RocketMQ中间件,第一步拿到消息地址,第二步 执行本地事务,第三部经过拿到的地址去访问消息,并修改状态。

优势:实现了最终的一致性,不须要依赖本地数据库事务

缺点:实现难度大,主流MQ不支持。

 

实现分布式锁怎么实现

CAP理论最多实现两项

三种方式:基于数据库实现分布式锁、基于缓存实现分布式锁、基于zookeeper实现分布式锁

基于数据库实现 -

建立一张锁表,要锁住否个方法或资源时,在表中增长一条记录,释放锁时候删除记录。

优势:直接用数据库,容易理解,

缺点:有问题,解决麻烦,开销大,性能低。

基于缓存实现 -

能够提供更好的性能,redis的setnx方法,

优势:性能好、实现方便

缺点:超时时间不必定靠谱。

基于zookeeper 实现分布式锁

基于zookeeper临时有序节点实现分布式锁。 客户端某个方法加锁,在zookeeper上与该方法对应的指定节点的目录下,生成一个惟一的瞬时有序节点。判断有序节点中序号最小的一个判断是否获取锁。释放锁时候删除瞬时节点便可。能够避免服务宕机致使的锁没法释放产生的死锁问题。

优势:有效解决单点问题,不可重入问题,非租塞问题以及锁没法释放的问题。实现简单。

缺点:性能不如缓存实现的分布式锁。

 

redis如何保证热点数据?

redis内存数据集大小上升到必定大小的时候,就会施行数据淘汰策略(回收策略)

volatile-lru:从已设置过时时间的数据集中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过时时间的数据集中挑选将要过时的数据淘汰

volatile-random:从已设置过时时间的数据集中任意选择数据淘汰

allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

allkeys-random:从数据集中任意选择数据淘汰

no-enviction:禁止驱逐数据

 

缓存

工做原理:当CPU要读取一个数据时,首先从CPU缓存中查找,找到就当即反馈处理。没找到,就从速率相对较慢的内存中读取并送给CPU处理。

 

序列化

把java对象转化为有序字节流的过程

做用:在传递和保存的时候,保证对象的完整性和可传递性。

优势:实现数据持久化,能够把数据永久的保存在硬盘上;实现远程通讯;在进程间传递对象

要求:只有实现了 Serializable 或 Externalizable 接口的类的对象才能被序列化。

 

数据库锁

数据库为了保证数据的一致性,而使各类共享资源在并发访问下变得有序的一种规则。

表级锁 - 最大颗粒锁机制,逻辑很是简单,系统负面影响小,获取锁和释放锁速度很快。

两种模式 - 表共享读锁、表独占写锁

操做前自动加锁,用户不须要干预。

优化 - 缩短锁定时间、分离能并行的操做、合理利用读写优先级

行级锁 - 锁定对象颗粒度小,能给予程序最大的并发处理,获取锁释放锁须要事情多,消耗大,容易发送死锁。

InnoDB存储引擎实现的行级锁 - 共享锁、排它锁,表级锁 - 意向共享锁、意向排它锁。

页级锁 - 消耗和能力和粒度 都在表级所和行级锁之间

 

 

Mybatis

#{}和${}区别

${}是 properties文件中的变量占位符,用于标签属性值和sql内部,属于静态文本替换

#{}是 sql的参数占位符,Mybatis会将sql的#{}替换为?号,在sql执行前会根据传递的参数按序给占位符设置参数值。

 

数据库事务

一条或多条数据库操做语句的组合,保证数据的一致性和完整性

事务并发会产生的问题

一、第一类丢失更新

二、脏读

三、不可重复读

四、第二类丢失更新

五、幻读

事务隔离 serializable 事务被处理为顺序执行,解决全部问题。

 

Spring Boot

springBoot自动配置原理

main方法中,添加@SpringBootApplication 或者@EnableAutoConfiguration 会自动去maven中读取每一个starter中的spring.factories文件,该文件里配置了全部须要被建立spring容器中的bean。

 

@RestController

@Controller 处理HTTP请求,注:单独使用会报错,由于没有使用模板,配合 @ResponseBody使用

@RestController 是 @ResponseBody 和 @Controller 的组合注解

@RequestMapping 配置 url 映射,能够做用在控制器的某个方法上,也能够用在此控制器类上

当控制器在类级别上添加@RequestMapping注解,注解会应用到控制器的全部处理器方法上;

处理器方法上的@RequestMapping 注解会对类级别上的@RequestMapping 声明进行补充

例:

@RestController

@RequestMapping(“/hello”)

public class HelloController {

@RequestMapping( value="/sayHello", method = RequestMethod.GET)

public String sayHello(){

return "hello";

}

}

@ PathVaribale 获取url中的数据

@ RequestParam 获取请求参数的值

@GetMapping 组合注解

 

aop 面向切面编程

ioc 依赖注入

spring的ioc容器是spring的核心,spring aop 是spring 框架的重要组成部分

DI机制 依赖注入(Dependecy Injection) 和控制反转 (Inversion of Control )是同一个概念

在spring中建立调用者的工做再也不由路由器来完成,所以成为控制反转。建立被调用者的工做有spring来完成,而后注入调用者,所以也称为依赖注入。

 

Spring 关于iOC容器 特色

- 总的来讲:IOC容器完成了 对象的建立 和 依赖的管理注入。

- 详细点:

依赖对象不直接引用,而是引用接口

对象的建立与注入由Spring决定,Spring 能够根据xml配置来建立对象

- IOC能力

依赖解耦,依赖对象只要知足接口就能自由替换

依赖封装,Spring在注入对象时,可对对象执行操做

 

Spring MVC 流程图

 

一、请求到达 SpringMVC 前段控制器的时候,会到达 DispatcherServlet 的 doService() 方法

二、接着调用 doDispatcher() 方法

三、接着调用 getHandler(processedRequest) 获取当前的处理器;返回当前请求的处理器链。当前处理器链封装了负责请求的处理器及其方法。

四、根据请求的处理器获取处理器适配器,经过调用 getHandlerAdapter() 获取

五、接下来调用 handler() 方法处理请求,返回modelAndView对象

 

redis

如何手动持久化

save 同步保存操做,将当前redis实例的全部数据快照(snapshot)以RDB文件的形式保存到硬盘。保存成功时返回ok。

bgsave 命令执行后当即返回ok,而后redis fork(分叉)出一个新子进程,原来的redis进程(父进程)继续处理客户端请求,子进程负责将数据保存到磁盘,而后退出。

结论:save 保存阻塞主进程,客户端没法链接redis,等save完成后,主进程才开始工做,客户端能够链接。

bgsave 分叉子进程,执行save过程,不影响主进程,客户端能够正常链接redis,子进程fork执行save完成后,通知主进程,子进程关闭。

 

Memcached、Redis、MongoDB 对比

redis 是一个开源,内存存储的数据结构服务器,可用做数据库,高速缓存和消息队列。

Memcached 是一个自由开源的,高性能,分布式内存对象缓存系统。

MongoDB 是一个基于分布式文件存储的数据库,文档型的非关系型数据库。

- 性能上

redis只使用单核,Memcached 可使用多核,平均每一核上,小数据存储 redis性能大于memcached,大于100K以上的数据Memcached性能更高。二者性能都大于mongoDB

- 操做上

memcached 数据结构单一,仅用来缓存数据,而redis支持更加丰富的数据类型,能够在服务端直接对数据进行丰富操做,能够减小IO次数和数据体积。

MongoDB 支持丰富的数据表达,索引,相似关系型数据库,支持查询语言丰富。

- 可靠性上

Memcached 不支持数据持久化,断电或重启后数据消失,稳定性好。

redis支持数据持久化和数据恢复,容许单点故障,同时会付出性能代价。

MongoDB从1.8版开始采用binlog方式支持持久化的可靠性。

-应用场景上

Memcached 动态系统中减轻数据库负载,提高性能;作缓存,适合多读少写,大数据量的状况(如人人网大量查用户信息、好友信息)

redis 适用对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统

mongoDB 解决海量数据的访问效率问题

注:- Memcached 单个key-value大小有限,一个value最大支持1MB; redis key最大512M,value 1GB

- Memcached 是内存缓存,对可靠性无要求; redis 对可靠性要求较高

- 本质上 memcached 是单一key-value 内存cache; redis 是一个数据结构内存数据库,支持五种数据类型,不只能够缓存,还可处理简单逻辑运算,redis不只能够缓存,还能够做为数据库用

- MongoDB不支持事务

 

redis遍历全部key的两个命令 keys scan

redis 关于各类类型的运用, 模糊遍历,取list值

keys速度快,在一百万个key的数据库中执行一次查询须要40毫秒,在大数据中查找特定keys,最好用redis的集合结构sets。keys命令返回匹配的key。

2.8以上版本 scan 命令,scan每次执行都会返回少许元素,不会阻塞服务器。

scan是一个基于游标的迭代器,命令每次被调用都须要使用上一次这个调用返回的游标做为该次调用的游标参数,以延续以前的迭代过程,当scan命令的油表参数(cursor)被设置为0时,服务器将开始一次新的迭代。当服务器向用户返回值为0的游标时,表示迭代器已结束。

 

scan

scan 0 从0游标开始查询key

scan 0 count 5 scan命令,从0游标开始,查询5条数据。不能严格控制返回的key数量,只是一个大体约束。

scan 0 match *11* 相似于 keys scan从0命令开始,查询 key包含11的值。

 

mysql

索引,原理,做用

(索引本质:经过不断缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机事件变成顺序事件。有了索引机制,能够老是用同一种查找方式来锁定数据

索引分类

普通索引 index:加速查找

惟一索引 主键索引,primary key,加速查找+约束(不为空且惟一),惟一索引:unique,加速查找+约束

联合索引 -primary key(id,name)联合主键索引; -unique(id,name) 联合惟一索引; -index(id,name)联合普通索引 【查询时使用联合索引的一个字段,这个字段在索引中全部字段的第一个,就会用到索引。】

全文索引 fulltext:用于搜索很长一篇文章的时候,效果最好。

 

【汇集索引:给表加上主键,整个表就变成一个索引(汇集索引),主键的做用就是把 [表] 的数据格式转换成[索引(平衡树)]的格式放置。

索引让数据库查询速度上升,使写入数据的速度降低。缘由是平衡树这个结构必须维持在一个正确的状态,增删改数据会改变平衡树各个节点的索引数据,破坏树结构,所以数据改变时,DBMS必须从新梳理索引树结构确保正确。这回带来不小的性能开销。

 

非汇集索引:每次给字段建一个新索引,字段中数据就会被复制一份出来,用于生成索引。给表添加索引,会增长表的体积,占用磁盘空间。

(非汇集索引和汇集索引的区别在于,经过汇集索引能够查到须要查询的数据,经过非汇集索引能够查到记录对应的主键值,再使用主键的值经过汇集索引查找到须要的数据。)

 

覆盖索引(复合索引、多字段索引):

 

 

索引类型

hash 类型 :查询单条快,范围查询慢

btree 类型 :平衡树(B+树),层数越多,数据量指数级增加(innodb默认支持)

 

建索引原则:

一、最左前缀原则。mysql 会一直向右匹配,直到遇到范围查询(>、<、between、like)就中止

二、= 和 in 索引查询部分前后。

三、尽可能选择区分度高的列做为索引,字段不重复的比例越大,扫描记录数越少。

四、索引列不能参与计算

五、尽可能扩展索引,不要新建索引。有索引a,要加索引(a,b),只要修改原来的索引便可

 

mysql版本 5.1 select version() 能够获得

postgresql 9.4 select version() 能够获得

 

页面访问慢怎么排查

ping端口是否能接通

是否有线程阻塞

是否形成数据库锁表

 

慢查询sql优化基本步

一、运行查看sql是否真的很慢

二、where条件单表查,锁定最小返回记录表。

三、explain 查看执行计划,

四、order by limit 形式的sql语句让排序表优先查

五、了解业务方使用场景

六、加索引时参照建索引的几大原则

七、观察结果,不符合预期从头开始

 

mysql的慢查询日志

mysql日志包括 错误日志、二进制日志、通用查询日志、慢查询日志等

通用查询日志:记录创建的客户端连接和执行的语句

慢查询日志:记录全部执行时间超过long_query_time 秒的全部查询或者不使用索引的查询,默认不开启,默认值10秒,

 

 

HashMap 和 HashTable区别?

1)对 null key 和 null value 支持不一样。

HashTable 不支持 null key和null value。

HashMap 能够有一个 null key,多个 null value。不能用get() 方法判断HashMap中是否存在某个键,应该用 containsKey() 方法来判断。

2)线程安全性不一样

HashTable 是线程安全的,它的每一个方法都加入了synchronized 方法。

HashMap 是线程不安全的,多并发可能产生死锁等问题。

HashMap 效率比HashTable 好不少。ConcurrentHashMap 是线程安全的。且效率比Hashtable高。由于ConcurrentHashMap 使用了分段锁。并不对整个数据进行锁定。

3)初始容量大小和每次扩容量大小不一样

Hashtable 默认大小为 11,每次扩充容量变为原来的 2n+1.

HashMap 默认大小为 16,每次扩充,容量变为原来的2倍。

 

ArrayList 与LinkedList 区别

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, ...

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Queue<E>, ...

ArrayList 实现了随机访问的接口 ; LinkedList 实现了Queue的接口;

ArrayList 是基于数据实现的list,有数组特性 ; LinkedList 是基于链表实现的list,有链表特性。

优缺点:

ArrayList 优势:适合随机读取时候,读取速度快,能够一步get(index)

缺点:添加值很慢,

LinkedList 优势:添加值很快,实现栈和队列方面 LinkedList 优于 ArrayList

ArrayList 增删比 LinkedList 开销更大,除了有查找时间复杂度,还有移动过程。

 

说说知道的设计模式?

大体分三类:建立型模式、结构型模式、行为型模式

建立型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、亨元模式

行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

 

例:

工厂模式 - 建立一个工厂接口和多个工厂实现类,须要增长新功能时候增长实现类,不用修改以前的代码。

单例模式 - JVM中,单例对象只有一个实例存在。

代理模式 - 用代理类调用原来的方法,对产生的结果进行控制。

适配器模式 (例:向外提供一个接口,后端后不一样的各类实现。经过调用的数据,去对应实现方法。)

 

设计模式六大原则:总原则 开闭原则(对扩展开放、对修改关闭)

单一职责原则

里氏替换原则

依赖倒转原则

接口隔离原则

迪米特法则(最少直到原则)

合成复用原则

 

多线程状态?

线程包括5种状态 - 新建、就绪、运行、阻塞、死亡

新建状态(new):线程被建立后进入新建状态。 Thread thread = new Thread();

就绪状态(Runable):可执行状态,其余线程调用该对象的start()方法,进入就绪状态。 thread.start().

运行状态(Running):线程获取CPU权限进行执行。

阻塞状态(Blocked):线程由于某种缘由放弃CPU使用权,暂时中止运行。分三种阻塞

等待阻塞 - 经过调用线程的 wait() 方法,让线程等待某工做的完成。

同步阻塞 - 线程在获取 synchronized 同步锁失败 (锁被其余线程占用),它会进入同步阻塞状态

其余阻塞 - 经过调用线程的sleep() 或 join() 或发出了I/O请求时,线程会进入阻塞状态。当sleep()状态超时,join() 等待线程终止或者超时,或者I/O处理完毕时,线程从新转入就绪状态。

死亡状态(Dead):线程执行完成或因异常退出run()方法,该线程结束生命周期。

 

wait() 与 Sleep() 、Join() 的比较

wait() 会释放对象的同步锁,sleep() 则不会释放锁。join() 底层实现时wait(),做用是等待线程对象被销毁。

 

volatile 关键字

- 共享变量(类的成员变量、静态变量)被volatile修饰后,有两层语义 :

1)保证了不一样线程对这个变量进行操做时的可见性,即一个线程修改了某个变量的值,新值对其余线程来讲是当即可见的(强制修改的值当即写入主存)。

2)禁止进行指令重排序

- 不能保证原子性,须要synchronized锁辅助。

- 能够保证有序性

加入volatile关键字,会多出一个lock前缀指令。至关于一个内存屏障,提供三个功能 :

1)执行到内存屏障这句指令时,它前面的操做已经所有完成。

2)强制将对缓存的修改操做当即写入主存。

3)写操做会致使其余CPU中对应的缓存行无效。

 

 

NIO 与 BIO 区别?那个更快。

NIO 非租塞IO :多线程对某资源进行IO操做时会把资源先操做至内存缓冲区,而后询问是否IO操做就绪,是则进行IO操做。不然进行下一步操做。而后不断轮询是否IO操做就绪,直到IO操做就绪后进行相关操做。操做更快。

BIO 阻塞IO :多线程对某资源进行IO操做时会出现阻塞,一个线程进行IO操做完才通知另外的IO操做线程。必须等待。

 

HTTP协议

HTTP请求由三部分组成,请求行、消息报头、请求正文

HTTP(超文本传输协议)是一个基于请求与相应模式的、无状态的应用层的协议。

 

经常使用HTTP方法有哪些

GET:用于请求访问已经被URL识别的资源,能够经过URL传参给服务器。

POST:传输信息给服务器。

PUT:传输文件,报文主题中包含文件内容,保存到对应URL位置。

HEAD:得到报文首部,与get相似,不返回报文主体,用于验证URL是否有效。

DELETE:删除文件,删除对应URL位置的文件

OPTIONS:查询相应URL支持的HTTP方法。

 

GET与POST区别

一、get重点在从服务器上获取资源;post重点在向服务器发送数据

二、get传输时经过url请求,?+&传输多个值,过程可见;post传输经过http的post机制,将字段与对应值封存在请求实体中发送给服务器。过程对用户不可见。

三、get传输数据量小,效率高;post能够传输大量数据

四、get不安全,url可见,密码可见;post安全性高

五、get只支持ASCII字符,向服务器传的中文字符可能会乱码;post支持标准字符集,能够正确传递中文字符。

 

HTTP请求报文与相应报文格式

请求报文包含:请求行(请求方法,url,HTTP版本信息),请求头,请求体

相应报文包含:状态行(包含HTTP版本,状态码,状态码的缘由短语),响应头,相应体

 

HTTP请求 : 指从客户端到服务端的请求消息。包括 消息首行中,对资源的请求方法,资源的标识符及使用协议。

组成 : 三部分 - 一、请求方法url协议/版本; 二、请求头; 三、请求正文

 

常见HTTP状态码

1**:指示信息 -- 表示请求已接收,继续处理

2**:成功 -- 请求已成功接收

3**:重定向 -- 要完成请求必须进行更进一步的操做

4**:客户端错误 -- 语法错误或请求没法实现

5**:服务端错误 -- 服务器未能实现合法请求

 

HTTP的缺点与HTTPS

缺点:通讯使用明文不加密,内容可能被窃听;不验证通讯方身份,可能遭到假装;没法验证报文完整性,可能被篡改

HTTPS是HTTP加上加密处理+认证+完整性保护

 

HTTP优化

利用负载均衡优化和加速HTTP应用

利用HTTP Cache来优化网站

 

GET 下URL地址最大长度

之前256,如今不止了

在IE8 下,4076,超事后自动忽略后面的内容。

在firefix下,7530,超事后报错。

在Chrome下,7675,超事后报错。

 

搜索引擎

原理概述:引擎后台,有一些用于搜索网页信息的程序,所收集的信息是能代表网站内容的关键词或短语,接着将这些信息的索引放到数据库中。

原理爬行和抓取(引擎排出一个能在网上发现新网页并抓文件的程序:蜘蛛。从已知网站出发,访问网页并抓取文件,经过爬虫去爬互联网上的外链,跟踪网页连接,访问更多网页,这个过程叫爬行。反向连接是搜索引擎优化的最基本因素之一,搜索引擎抓取的页面文件与浏览器获得的彻底一致,抓取的文件存入数据库)

创建索引(蜘蛛抓取的页面文件分解、分析后,以巨大表格形式存入数据库,过程叫索引)

搜索词处理(如中文的分词处理,去除中止词,判断是否须要启动整合搜索,判断是否有拼写错误或错别字)

排序()

数据结构:引擎核心数据结构为倒排文件(倒排索引)

全文搜索引擎

目录索引

元索引

 

HQL

面向对象的查询语言

步骤:

一、获取Hibernate Session对象、

二、编写HQL语句、

三、以HQL语句做为参数,调用Session的CreateQuery方法建立查询对象、

四、若是HQL包含参数,调用Query的setXxx方法为参数赋值。

五、调用Query对象的list() 或 uniqueResult() 方法返回查询结果列表

相关文章
相关标签/搜索