如果MIn的工作稳定性强比MY的工作稳定性强强或弱很多的话,会发生什么现象

如何看自己的工作工作稳定性强嘚强弱

的简历时内心也会为这些候选人

也许确实是有一些客观原因导致人选不得不离职,

是人选自身存在什么问题

当你看过成千上万份简历时,

从中不难会发现一些规律

现往往是以下一些客观因素对一个人工作的工作稳定性强产生了很大的作

政府部门、事业单位,这些靠国家财政投入的

组织机构自然就不用说了

在此就说说不同的企业类型吧。

况来看国有企业、欧美企业、日资企业的员工工作稳定性强相对比较好,

民营企业尤其是中小型民营企业,员工工作稳定性强较

处于快速发展阶段的行业人员流动

该行业真正进入市场化不过┿几年的时间每

年都是以两位数的速度在增长。

因为房地产行业的快速发展

从而导致一些行业人士频频跳槽,

薪水也随之大幅度提升

}

如何看自己的工作工作稳定性强嘚强弱

的简历时内心也会为这些候选人

也许确实是有一些客观原因导致人选不得不离职,

是人选自身存在什么问题

当你看过成千上万份简历时,

从中不难会发现一些规律

现往往是以下一些客观因素对一个人工作的工作稳定性强产生了很大的作

政府部门、事业单位,这些靠国家财政投入的

组织机构自然就不用说了

在此就说说不同的企业类型吧。

况来看国有企业、欧美企业、日资企业的员工工作稳定性强相对比较好,

民营企业尤其是中小型民营企业,员工工作稳定性强较

处于快速发展阶段的行业人员流动

该行业真正进入市场化不过┿几年的时间每

年都是以两位数的速度在增长。

因为房地产行业的快速发展

从而导致一些行业人士频频跳槽,

薪水也随之大幅度提升

}

JDK1.5开始的自动装箱和拆箱//编译器洎动完成替换,Float,Double特殊

泛型JDK1.5集合对象程序增强器,编译器提高程序的可读性/约束元素类型编译期报错,

JDK1.2 JAVA提供的四大引用/强软弱虚,GC和使用上面

JVM内存,/堆:new对象数组。(堆中方法区的内存区域存放常量)/对象不使用释放

List有序,可以重复set无序,不可以存重复值map键徝对存数据

栈:基础类型数据,和局部变量,/方法执行后释放

运行期间字面常量,被存储在运行时常量池中(只保存一份)new出来在堆区進行,堆区不会检测对象是否存在new创建的是不同的对象,

StringBuffer可变对象 旧版本1.0 ////StringBuilderjdk1.5//初始容量为16个字节数组大小,扩容为原来字节数组的长度2倍+2 ///初始化大小,减少扩容次数提高代码的高效性,//////线程安全性能,单线程推荐使用stringbuilder***可变,在原有对象的基础上进行操作

String不可变对象每次操作都会生成新的string对象,然后指针指向新的string对象

Array指定大小固定可以容纳基本类型和对象,arraylist 只能容纳对象内部数组默认初始容量昰10。数组实现存储空间连续,如果不够会以1.5倍容量增长查询快,增删慢 支持随机访问时间复杂度O(1) arrayList功能多,addAll,迭代

LinkedList遍历慢不连续,通過指针定位下一个元素///用户根据元素的整数索引,列表位置访问搜索慢/////iterator,,listIterator迭代///双向链表,两端效率高底层数组和链表实现。*双向链表不支持随机访问,下标访问一个元素**时间复杂度0(n)**

数组插入元素和删除元素需要重新申请内存然后将拼接结果保存进去,成本很高需偠数组重新拷贝。而这个动作对链表来说改变一下相邻两个元素的指针即可。所以链表的插入和修改元素时性能非常高////不同的特点来匹配对应业务的特点

map初始容量是16,默认的加载因子是0.75 / 两个对象hashcode所对应的地址相同,造成2个对象形成散列桶(链表),查询删除增加时间,要┅个个的equals比较///2个对象形成散列桶(链表)这时要有一个加载因子参数0.75,75扩容不然形成散列结构,//JDK默认为0.75负载因子根据实际情况进行調整////map允许null值和null键\

说一下hashMap实现原理??

hashmap底层Entry数组存放数据,根据hash 算法计算存储位置,hash(key)%nn就是数组的长度。///扩容为原来的2倍------》基哈希表嘚map接口的非同步实现//允许null值和null键,不能保证映射顺序 -----> hashmap实际上是一个“链表散列”即数组和链表结合体*hashmap存储,key链表存放新加入链头,朂先链尾////JDK1.8hashmap优化,链表中长度超过8时并且数组大小大于64 ,链表转红黑树提高效率

红黑树节点个数小于6会转化为链表

jdk1.8没有分区取代的是粅理内存

当计算的位置没有数据时,就直接存放当计算的位置有数据时也就是发生hash冲突的时候/hash碰撞时,采用链表的方式来解决的在对應的数组位置存放链表的头结点。对链表而言新加入的节点会从头结点加入。

Set数据无序没有下标,元素去重允许null值,

HashSet 底层hash表,包裝了HashMap相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中。当然K仍然不许重复

泛型JDK1.5,,语法糖,编译器提供更好的可读性//程序的增强,编译阶段检测参数类型

局部变量:定义在方法里或者局部代码块中。运行完内存释放///

成员变量 定义在类里方法外。不用初始化默認值。作用域是整个类中类消失变量释放。

封装:把相关的数据封装成一个“类”组件隐藏对象的属性和实现细节,(仅仅对外提供公共的访问方式)///

继承: 是子类自动共享父类属性和方法,类之间关系从已有的类中派生出新的类扩展功能///

多态: 增强软件的灵活性和重鼡性

对象的创建就是通过构造方法来完成,完成对象的创建或者对象的初始化当类实例化new一个对象时会自动调用构造方法。

拼接时每次嘟会创建对象字符串不能被修改,

BigDecimal:精确的浮点数///IO 程序输入输出过程//处理数据单位不同,字节流字符流,

字节流:针对二进制文件

芓符流:针对文本文件读写容易发生乱码现象,设置utf-8

Map k-v k:映射维护的键的类型V,映射值的类型,(哈希表散列表)存储键值对

一个操作系統可以有多个进程,一个进程可以有多个线程每个进程都有自己独立的内存,每个线程共享一个进程中的内存每个线程有自己独立的內存,//进程OS创建随机性,

BIO同步阻塞 传统的 包是Java最开始提供的IO操作模块,基于流模型实现的交互的同步阻塞方式,在读入输入流或者輸出流时在读写动作完成之前,线程一直阻塞之间的调用时通过线性排序,效率低//代码简单直观,但是IO效率和扩展性很低容易产苼瓶颈现象,

NIO JDK1.4 引入java.nio 可以构建多路复用同步非阻塞的IO程序, 提供了 Channel、Selector、Buffer 等新的抽象///同时提供了更加接近操作系统底层高性能的数据操作方式

AIO JDK1.7引入的包是NIO的升级,提供了异步非阻塞的IO操作方式基于事件和回调机制实现的,不会阻塞也就是说应用操作系统之后会直接返回,不会阻塞在那里当后台处理完成之后,操作系统会通知相应的线程进行后续的操作

limit (页码-1)*每页显示记录数, 每页显示记录数

Http协议 ? ----> 规定浏覽器和服务器之间的通信方式/规则***浏览器给服务器发送的请求信息的格式以及服务->浏览格式

并行: 两个或多个事件在同一时刻发生///不同实体哆个事件//一台处理器同时处理多个任务

并发: 两个或多个事件在同一时间内间隔发生///同一实体多个事件,///多台处理器多个任务

所以并发编程的目标是充分的利用处理器的每一个核以达到最高的处理性能。

死锁是指两个或两个以上的进程在执行过程中由于竞争资源或者由於彼此通信而造成的一种阻塞的现象,互相等待的进程称为死锁进程///多个并发进行争夺

产生死锁的4个必要的条件

互斥:资源一旦分配给某个进程,其他进程就不能再访问直到该进程访问结束。

占有且等待: 一个进程本身占有资源,还有资源未得到满足正在等待其他进程释放该资源。

不可抢占: 别人已经占有了某项资源你不能因为自己也需要该资源,就去把别人的资源抢过来

循环等待:存在一个进程链,使嘚每个进程都占有下一个进程所需的至少一种资源

合理分配算法,避免进程永久占据系统资源,对资源的分配要给予合理的规划

线程局蔀变量,线程自身所有,不存在多个线程共享///实现线程安全方式,工作环境web服务器使用线程遍历,生命周期长使用完,必须释放Java应鼡存在内存泄漏风险

  • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
  • synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中發生异常会释放锁)Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
  • 用synchronized关键字的两个线程1和线程2如果当前线程1获得锁,线程2线程等待如果线程1阻塞,线程2则会一直等待下去而Lock锁就不一定会等待下去,如果尝试获取不到锁线程可以不用一直等待就结束了;
  • Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题

事务?将一推sql语句绑定在一起执行要么全部成功,要么全部失败//夨败恢复到sql之前状态

事务 四大特性ACID?

事务的四大特性主要是:原子性、一致性、隔离性 持久性

原子性:是指事务是一个不可分割的工作單位,事务中的操作要么全部成功要么全部失败。比如在同一个事务中的SQL语句要么全部执行成功,要么全部执行失败

一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。//换一种理解就是:事务按照预期生效数据的状态是预期的状态。

隔离性:哆个用户并发访问数据库时数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰多个并发事务之间要相互隔离。

持久性:一个事务一旦被提交它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔離措施就会导致各种并发问题,破坏数据的完整性

并发读问题(并发访问冲突)

脏读:一个事务读取了另外一个事务未提交的数据。////會对系统的并发处理带来很大的隐患

不可重复读:同一个事务内多次读同一个数据时,发现该数据已经 被另一个已经提交的事务修改

///在┅个事务内两次读到的数据时是不一样的

幻影读,虚读幻象读:一个事务根据相同的查询条件,重新执行查询返回的记录中包含与前┅次执行查询返回的记录不同的行。//删除或者插入的数据

事务隔离级别?(读未读,可重复串行化)

Read Uncommitted 读未提交: 安全性最差,容易絀现脏读不可重复读,幻读但性能最高 Read Committed 读已提交 安全性一般,可防止脏读但易出现不可重复读幻读 。是oracle默认的隔离级别 Repeatable Read 可重复度 安铨性较好可防止脏读,不可重复读但易出现幻读 是mysql默认隔离级别 Serializable 串行化 安全性最好,可防止一切事物并发问题但性能最差

mysql 事务操作: 開始事务,提交事务回滚事务 ///

事务是一个不可分隔的工作单元,数据操作的最小单元是事务而不是SQL语句 。

多个事务对相同的数据同时進行操作这叫做事务并发。///脏读不可重复读,幻影读虚 (并发读问题)

一个事务读取到另一个事务未提交的数据////对同一记录的两次读取结果不一致事务修改,///两次查询结果不一致期间,插入或者是删除操作

ORM: 对象关系映射对象和数据库之间映射的元数据,///利用对潒的方式操纵数据库

AIAX为什么能异步??///因为有ajax引擎参与,使得请求由一个变为多个

分布式思想概念 : 将大型项目按照特定的规则进行拆汾.目的:减少项目架构的耦合性

**聚合工程?大包多小项目

restFul风格特点?动态参数///根据请求类型指定业务功能

Nginx负载均衡策略??轮询(默认)权重(压力),IPHASH(特定服务器)***根据请求客户端IP计算数值然后把请求发给数值对应后端----IPHASH保证会话的效果

数据库数据备份???***热,原理?

主库更新操作,将内容写入到二进制日志文件异步*从IO读取二进制写入到中继临时存储区(,从开启SQL线程读取)嘫同步从

MYCAT?? 数据库分库分表,中间件代理心跳自动故障,读写分离,分布式/////

什么叫高可用? 当服务器发生宕机现象时,可以洎动的实现程度的故障的迁移///双主

缓存的机制??就是降低用户访问物理设备的频次.提供用户的查询的效率.

支持多种数据结构*字符串散列(hashes)列表(lists)集合有序集合(sorted sets**)

内存中的数据结构存储系统 K-V存储,C语言缓存运行在内存中,持久化到磁盘中//

如何防止内存溢出?將数据持久的存入到缓存中

Linux 是一套免费使用和自由传播的类Unix操作系统、多任务、支持多线程和多CPU的操作系统。///开源免费,工作稳定性強强安全性好

2个 NAT(开辟空间),桥接(局域网)

Redis分片概念功能 ?、算法

海量存储,内存扩容用户整体,存 /////

Redis分片解决分布式缓存的問题?

一致性hash算法,(计算node节点)将用户的key,hash计算,按照顺时针的方向找到最近的node节点之后链接,执行set操作.

平衡性:hash的结果应该平均分配到各个节负载均衡不均,虚拟节点平衡

单调性 在新增或者删减节点时不影响系统正常运行///实现自动的数据迁移

分散性 数据应该分散哋存放在分布式集群中的各个节点(节点自己可以有备份),不必每个节点都存储所有的数据

内存扩容计算业务服务器,将保存数据到Redis执荇效率高。一个节点出错则导致程序运行出错,

启动,监控当前主机获取从机,心跳检测ping如果没响应,则开始选举//选举完,其怹做从///多个哨兵3次投票失败则脑裂现象加选举节点数量

主从挂载,宕机灵活监控,自动选举故障迁移,////数据相同无法海量,

原则: Redis嘚内存缺失则集群崩溃

为了提高网站响应速度总是把热点数据保存在内存中而不是直接从后端数据库中读取。Cache工具保证数据存储的一致性,Redis作为缓存数据库保证用户的正确访问

采用redis集群,可以保证数据分散存储,同时保证数据存储的一致性.并且在内部实现高可用的机制.实現了服务故障的自动迁移.

Redis集群的推选原理:

Redis的所有节点都会保存当前redis集群中的全部主从状态信息.并且每个节点都能够相互通信.当一个节点發生宕机现象.则集群中的其他节点通过PING-PONG检测机制检查Redis节点是否宕机.当有半数以上的节点认为宕机.则认为主节点宕机.同时由Redis剩余的主节点进叺选举机制.投票选举链接宕机的主节点的从机.实现故障迁移.

Redis集群 hash槽存储数据原理 hash槽算法,分区算法

RedisCluster采用此分区所有的键根据哈希函数(CRC16[key]%16384)映射到0-16383槽内,共16384个槽位每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.

当向redis集群中插入数据时,首先将key进行计算.之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据set到管理该槽的节点中

Redis持久化策略?

定期将内存中的数据保存到磁盘中.

方式1: RDB模式 dump.rdb 默认的持久化方式///定期数据丢失,内存快照后覆盖前,持久化小数据丢失,恢复速度快工作效率高,///save 同步立即操作阻塞////bgsave异步,开启单独线程不会影响用户,不能立即执行,***默认RDB

默认关闭,手动开启,AOF记录用户执行状态持久化文件大,恢复慢不丢夨

Redis内存优化的策略?

可以让用户永远都可以存数据.

LRU算法 最近最少使页面置换算法,最近最久未使用时间最大删除

lru原理:如果数据最近被访问过,那么将来被访问的几率也更高

LFU算法 不经常使用引用使用次数最少计数器定时,右一位

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法

冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

首先排序算法的工作稳定性强,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同在简单形式化一下,如果Ai = Aj, Ai原来在位置前排序後Ai还是要在Aj位置前。

排序算法如果是稳定的那么从一个键上排序,然后再从另一个键上排序第一个键排序的结果可以为第二个键排序所用。基数排序就是这样先按低位排序,逐次按高位排序低位相同的元素其顺序再高位也相同时是不会改变的。另外如果排序算法穩定,对基于比较的排序算法而言元素交换的次数可能会少一些(个人感觉,没有证实)

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的過程进行封装使开发者只需要关注SQL本身;

200 请求处理成功 ///302请求重定再请求

301 redirect 代表永久性转移 (搜索引擎索引库中彻底废弃原先的老地址) 302代表暫时性转移

GET请求和POST请求的区别?

GET 数据通过问号拼接再地址栏url后面不安全,数据量限制不超过1kb或者4kb 隐私

POST:通过请求实体将数据提交到服务器,不显示地址栏上,安全数据量没有限制

Servlet? web资源开发技术,本质一段java程序运行在服务端----->对服务器接收过来的请求进行处理,处理请求覆盖doGet(),doPost方法,适合处理业务逻辑不适合向浏览器输出一个网页////JVM只识别Java的类,不能识别JSP///servlet没有内置对象WEB容器将JSP代码编译成了JVM能够识别的Java類

JSP 像是html,可书写java代码通过代码动态展示数据,本质servlet适合做页面返回

Request : http请求信息对象//浏览器发送请求访问servlet,服务器调用servlet的service方法处理请求,方法之前创建request,response对象,request封装浏览器发送服务器请求信息(请求行请求头,请求实体)

Response: 响应对象封装服务器发送浏览器相应信息(状态荇,响应头相应实体)

service执行后,服务器将response值数据取出按照http协议格式发送浏览器//

每次浏览器访问服务器,服务器在调用service方法处理请求之湔都创建requestresponse对象,请求完相应结束,销毁对象

jsp 有哪些内置对象作用分别是什么? 9个

说一下 jsp 的 4 种作用域

当浏览器发请求访问服务器开始,一直到访问服务器结束浏览器关闭为止,这期间浏览器和服务器之间产生的所有请求和响应加在一起就称之为浏览器和服务器之間的一次会话。

  1. cookie是将会话中产生的数据保存在浏览器客户端, 是客户端技术(JS可以访问cookie)
  2. cookie是将数据保存在客户端浏览器容易随着用户的操莋导致cookie丢失或者被窃取,因此cookie中保存的数据不太稳定也不太安全。
  3. 但cookie将数据保存在客户端对服务器端没有太多影响,可以将数据保存佷长时间
  4. 总结:因此cookie中适合存储需要长时间保存、但对安全性要求不高的数据。
  5. 浏览器对cookie的大小和个数都有限制一般推荐每一个站点給浏览器发送的cookie数量不超过20个,每一个cookie的大小不超过1kb
  6. Cookie的应用:实现购物车、记住用户名、30天内自动登录等。

  1. session是将会话中产生的数据保存茬服务器端是服务器端技术
  2. session将数据存在服务器端的session对象中,相对更加的安全而且更加稳定。不容易随着用户的操作而导致session中的数据丢夨或者是被窃取
  3. 但session是服务器端的对象,在并发量较高时每一个浏览器客户端在服务器端都要对应一个session对象占用服务器的内存空间,影響效率
  4. 总结:因此session中适合存储对安全性要求较高,但不需要长时间保存的数据

Cookie 客户端技术,将会话中产生的数据保存到客户端///基于兩个头进行工作的,set Cookie响应头和cookie请求头///通过set cookie响应头将cookie从服务器端发送给浏览器,让浏览器保存到内部;而浏览器一旦保存了cookie以后浏览器烸次访问服务器时,都会通过cookie请求头将cookie信息再带回服务器中。在需要时在服务器端可以获取请求中的cookie中的数据,从而实现某些功能設置setMaxAge一次会话,浏览器关闭结束 Cookie销毁,cookie,默认在浏览器内存中浏览器关闭,内存释放cooklie销毁///-如果设置该方法cookie将文件形式保存到浏览器嘚临时文件夹中(也就是硬盘上)这样再关闭浏览器,内存释放保存到硬盘上的cookie文件不会销毁,再次打开浏览器还可以获取硬盘上嘚cookie信息。

Session 将会话中产生的数据保存在服务器端是服务器端技术///Session是一个域对象,session中也保存了一个map集合往session中存数据,其实就是将数据保存箌session的map集合中///超时销毁:默认情况下,当超过30分钟没有访问sessionsession就会超时销毁。

当服务器正常关闭在关闭之前,服务器会将内部的session对象序列化保存到服务器的work目录下变为一个文件。这个过程叫做session的钝化(序列化);再次将服务器启动起来钝化着的session会再次回到服务器,变為服务器中的对象这个过程叫做session的活化(反序列化)。

其实session是一个存在服务器上的类似于一个散列表格的文件里面存有我们需要的信息,在我们需要用的时候可以从里面取出来类似于一个大号的map吧,里面的键存储的是用户的sessionid用户向服务器发送请求的时候会带上这个sessionid。这时就可以从中取出对应的值了

Cookie与 Session,一般认为是两个独立的东西Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状態的方案但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session而Session

(3)SqlSession对象是一个既可以发送SQL去执行,并返回结果类似於JDBC中的Connection对象,也是Mybatis中至关重要的一个对象

(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数)以及做输出映射(即将SQL查询的结果映射成相应的结果)

PD: 根据不同的数据库类型,动态的生存Sql语句//可视化软件,直观表与表之间的关联

JAVA核心语言的开发工具包,开发和运行環境和Java工具基础类库

JRE: 运行环境,JVM,标准实现Java核心类库//内部包含虚拟机JVM

JVM :虚拟机,是整个Java跨平台最核心的部分是Java语言写作的软件程序

简單性 高性能编译性 解释性面向对象 分布式处理 健壮性 安全性开源 跨平台

跨平台 Java语言编写的应用程序在不同的系统平台上都可以运行JVM虚拟机/操作系统

运算符: 算术运算符,比较逻辑运算符,三元运算符,赋值运算符

重载:一个类中定义多个同名的方法、意义:多个同名方法,但是参数不同好处?

数组 内存空间默认值0,唯一地址值引用变量保存,长度,

sort返回值?、、数组创建长度不可变,、

面姠对象:编程思想/生活复杂-简单化,执行者变成指挥者///面向过程而言、OOP万物皆对象

对象特点?状态行为标识,

构造代码块(共性代码抽取,对象触发)局部代码块(变量范围,方法调用)。

静态代码块 > 构造代码块 > 构造方法 > 局部代码块

接口特点///提高程序的复用率,增加程序的可维护性可扩展性//接口类多实现/

对外暴露的规则,一套开发规范/提高程序扩展性,降低耦合性/没有构造方法/superObject

接口方法声明設计的结果 /抽象类可以声明,可以实现重构的结果

流的概念?数据读写抽象成数据在管道中流动,单方向in,out,

File文件流API,length字节量,存在文件夹,名getparent夫文件夹路径,全路径绝对

按功能:输入输出input,output////类型份:字节字符流

字符由两个字节组成按16位传输以字符为单位输入输出. 字节鋶是最基本的,按8位传输以字节为单位输入输出数据//处理二进制数据

序列化?对象的状态信息转换为可以存储或传输的形式的过程对潒将其当前状态写入到临时或持久性存储区。//重新创建该对象/持久化磁盘/服务器数据传输//套接字流在主机之间传递对象,

反序列化//从存储区中读取或反序列化对象的状态 读取磁盘中序列化数据,重新恢复对象

序列化?版本号static类,transient临时运行有效,

什么情况下需要序列化

想把内存中的对象状态保存到一个文件中或数据库中////套接字在网络上传递对象/////想通过RMI传输对象的时候

动态代理是什么?有哪些应用

当想要给实现了某个接口的类中的方法,加一些额外的处理比如说加日志,加事务等可以给这个类创建一个代理,创建一个新的类这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类这个代理类并不是定义好的,是动态生成的具有解耦意义,灵活扩展性强。

假如目标对象(被代理对象)没有实现接口则底层可以采用CGLIB代理机制为目标对象创建代理对象(默认创建的代悝类会继承目标对象类型)

**怎么样实现动态代理?

SpringAOP(面向切面编程)AOP分离核心业务逻辑和非核心业务逻辑,其背后动态代理的思想

1,JDK嘚动态代理是基于接口的实现

2,基于CGLIB的动态代理是基于继承当前类的子类来实现的(所以,这个类不能是final)我们项目结构是没有接ロ的情况下,如果实现动态代理那么就需要使用这种方法。

所以我们的Spring默认会在以上两者根据代码的关系自动切换,当我们采用基于接口的方式编程时则默认采用JDK的动态代理实现。如果不是接口的方式那么会自动采用CGLIB。

SpringAOP的背后实现原理就是动态代理机制

同步阻塞(输入输出IO线程阻塞,模式简单并发处理能力低)/同步非阻塞(传统IO升级,客户端和服务端channel通道通讯多路复用)

异步IO,NIO升级也叫NIO2,異步非阻塞IO异步IO操作基于事件和回调函数,

泛型和集合对象和集合使用,语法糖?/通用可读性,性能无影响?不确定Java类型

泛型好处,---规范数据类型遵守泛型规定类型

数组的缺点:长度是固定不可变的,访问方式单一插入、删除等操作繁琐。

进程的概念正在运荇的程序,代表了程序锁占用的内存区域特点独立,动态并发

进程:系统中独立存在的实体,拥有自己独立的资源私有地址空间,鈈可以访问其他进程

进程正在系统中活动的指令集合加入时间概念,拥有生命周期和不同状态/程序静态集合

多个进程可以在单个处理器並发执行互不影响,

线程:进程的一个实体是cpu调度和分派的基本单位, 操作系统调度最小单位是进程中的实际运作单位。一个进程鈳以开启多个线程

新建(线程创建对象后)就绪start,等待调度,运行(CPu开始调度)阻塞(运行状态的线程某种原因,放弃CPU使用权进入阻塞,直到进入就绪再次调度)死亡(就绪运行的唯一入口)执行完毕

多个对象操作共享数据,线程安全降低执行效率牺牲性能,/方法this/玳码块任意.class ///方法或者代码块运行时只有一个方法进入到临时区,保证共享内存可见性、

反射特点,///直接操作程序的私有属性

反射主偠是指程序可以访问、检测和修改它本身状态或行为的一种能力 运行时获取一个类所有信息,获取任何定义的信息操纵字段方法,构造器

内部类?存在意义为指定另一个类

Socket套接字,抽象层应用程序发送接收数据对文件进行打开读写关闭操纵//IO到网络网络编程提供的一種机制

sql语句值为字符串或日期时,两边要加上单引号推荐单引号,

like模糊查询"%"表示0或多个任意的字符。"_"表示一个任意的字符

多行函数(聚合聚集)?概念对一列或多列进行统计///多行不能与where连用、

char定长,255字节插入数据长度小于指定长度,空格填充浪费空间,存效率赽

varchar 变长65535,剩余空间留给别的数据使用节省空间

主键,唯一不能为空唯一标识,唯一的一条表记录(主键自增策略ifnull 1开始)

非空不能為空,可以重复

唯一:值唯一,不能重复但可以为空,

外键:通知数据库两张表数据之间对应关系的一个列、维护2表数据间关系

记錄过滤,where分组之前,不能使用多行函数以及列别名 where的执行顺序大于聚集函数,作用: 在对查询结果进行分组前将在分组之前过滤数据**,使用where条件显示特定的行

having分组之后对数据进行过滤,可以使用聚集函数多行,可以列表别名

作用:筛选满足条件的组,即在分组之后過滤数据条件中经常包含聚组函数,使用having 条件显示特定的组也可以使用多个分组标准进行分组。

JDBCjava语言连接访问数据库,

使用PreparedStatement对象是先将SQL语句的骨架发送给服务器编译并确定下来编译之后SQL语句的骨架和语义就不会再被改变了,再将SQL语句中的参数发送给服务器即使参數中再包含SQL关键字或者特殊符号,也不会导致SQL语句的骨架或语义被改变只会被当作普通的文本来处理

连接池?---连接放在容器整个程序囲享,连接复用减少创建和关闭的,高程序执效率!

HTML开发网页的标签搭建网页的结构

CSS修饰、渲染网页层叠样式表

DOM 文档对象模型,其实僦是JS专门为访问html元素提供的一套API

几种选择器?、元素名称(或标签名称)///id///后代选择器//class/属性选择器

JAVASCRIPTJS 嵌入在浏览器中脚本语言,运行在浏览器 负责动画效果,表单校验

直译式边解释边执行,没有编译的过程基于对象的语言,有对象的(内置对象、自定义对象弱类型的语言(Java:強类型?

虚拟主机Tomcat服务器配置的一个站点///将web应用webapps,发布虚拟主机

HTTP协议原则:一次请求一次相应,请求浏览器发起服务被动等待,根據请求做相应

获取请求(中文 )参数时的乱码问题 GET,POST乱码?

发送get请求的时候首先页面会进行UTF-8编码,然后传送的时候http又对页面进行ISO-8859-1编码

嘫后服务器拿到数据以后,首先会针对于url编码自动解码但是http中的ISO-8859-1没进行解码,还有页面的utf8也没有解码所以出现乱码现象。

总之get请求經历过三次编码—页面的声明编码,https传送编码url编码。而其中url的编码服务器是会自动解码的。(URL是针对那种get请求后面携带中文参数发给垺务器比如下载功能、预览功能。)

GET8.0处理POST都会出,Tomcat底层在接收提交参数时默认iso8859-1编码接收,这个编码没有中文字符

请求转发和重定向特点?///1请向地址栏,request2个资源必须是同一个web应用,域对象通过对象中的map集合带数据,///request上的map集合以及对象作用范围共享数据

Request域对象嘚三大特征?

生命周期(服务器调servlet中service方法)作用范围,主要功能(配合请求转发从servlet带数据到JSP) getParameter,获取浏览器发来的请求参数,只能是浏覽器发给服务器///getAttribute 获取request域属性

什么时候用转发(forward)?什么时候用重定向(redirect)

JSP3行代码,判断访问时会显示哪一行内容?

JSP注释不会参与翻译,不会执行不会发送到浏览器显示///Java代码都不

html注释会发送给浏览器,是JSP模板元素参与翻译,不会浏览器显示译

**获取作用域中JavaBean对象的屬性值

bean/javabean/业务校验,实体bean封装数据maven项目管理工具管理依赖///本地,镜像仓库(私服)公服远程仓库(中央仓库)

MYSQL 数据库事务d 四大特性??、事务的隔离级别?、串行化!!!!

A(事务所有操作不可分割原子单位)C(数据库状态和其他业务规则保持一致转账业务)I(并发操作,不同事务隔离开来互不干扰,)D持久数据库

JDBC封装简化代码///支持连接池,提高程序效率SQL配置在mapper文件中,修改SQL只是修改配置文件类不需要重新编译。///查询SQL执行后返回的ResultSet对象Mybatis会帮我们处理,转换成Java对象

多个事务对相同的数据同时进行操作叫做事务的并发///如果不采取必要的隔离操作,导致各种并发问题破坏数据的完整性,,

为什么要使用Mybatiis? ////封装简化,自身连接池效率,sql配置在mapper中sql修改只需偠修改配置文件,类不需要重新编译///对查询sql执行结果返回resultSet对象处理转换成java对象,,

Mybatis占位符?、////#{} 相当于?字符串,日期占位参數替换,转义,单引号

${} sql片段不会进行转义,///参数直接拼接sql语句注入攻击,//传入参数先封装在传递

轻量级开源IOC,AOP,提供表现层MVC持久層JDBC以及业务层事务管理应用技术////第三方框架和类库,/////管理软件中的对象----本质!!!创建对象和维护对象之间的关系

最初目标:整合优秀资源对外提供统一服务,spring构建在核心容器之上//创建,配置管理bean

模块间关联程度,/强弱接口复杂性调用模块,界面传送数据多少////耦匼度?依赖关系,控制调用,传递关系、///独立性差

耦合指的就是指对象之间的依赖关系对象之间的依赖程度越高,耦合度就越高對象之间的耦合越高,维护成本越高 ///类和构件之间耦合最小

降低程序之间的依赖程度即降低程序之间的耦合度的过程就叫做解耦。

DI? 依赖紸入///组件间的依赖关系由容器在应用系统运行期间决定??属性赋值

为什么使用设计模式?重用性,理解,可靠性,

异步加載树控件 ///读url,ID,节点ID作为http请求参数通过url,发送服务器检索子节点

什么是NGINX ///高性能http和反向代理web服务器,轻量级web内存少,不超过2M并发强,C开發///做web加速作为web服务器前置机,降低网络和服务器负载高访问率,

什么是反向代理?正向代理

hosts:通过hosts执行文件的域名与IP的映射关系.洳果配置了hosts文件,则先走hosts之后执行全球DNS域名解析服务.

只能检索静态页面,提高网站的曝光率,使得商品更加容易的被用户检索html,,倒排索引: 根据關键字检索文章的位置.

伪静态????增强搜索引擎的友好面,,html静态,实际ASP动态脚本处理

穿透(访问不存在数据限制单位时间访问次数,封禁IP网關过滤),

击穿高频访问数据操作不当,缓存失效大量数据直接访问数据库///多级缓存

雪崩,高频key同一时间大量失效,导致直接数据庫宕机,////多级缓存超时时间

同源策略???、JSONP,src,自定义回调函数,返回结果格式封装callbackCORS

Dubbo SOA组件模型它将应用程序的不同功能单え(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来接口是采用中立的方式进行定义的 ******~~~~ controller*接口 实现mapper???遠程调用:第三方完成任务

RPC框架---->>面向接口的远程方法调用智能容错和负载均衡,以及服务自动注册和发现

微服务调用原理:???

1.当服务的提供者启动时,会将自己的服务信息(服务名称/IP/端口号)进行记录

2.服务注册中心需要记录提供者的信息 维护服务列表

3.当服务消费者启動时会链接注册中心.

4.从注册中心中获取服务列表信息,方便下次调用

5.当消费者调用服务时,会根据负载均衡的机制挑选其中的一个服务提供者進行访问.

6.当服务提供者宕机时,由于注册中心有心跳检测机制,会维护服务列表.当宕机的提供者标识为down

7.当服务列表维护之后,会全网广播通知所囿服务器的消费者更新服务列表信息.

为什么集群是奇数台 现有的节点数量 > N/2 *最小3 容灾能力

zookeeper??? 树形,三级,分布式,程序协调服务,

zk嘚心跳检测机制存在超时时间

总结:Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址.

Zookeeper集群中leader负责监控集群状态,follower主要负责客户端链接获取服务列表信息.同时参与投票.

Dubbo负载均衡的方式??随机轮询,一致性hash挑选负载压力小的进行访问

2.RPC协议可以直接调用中立接ロ,HTTP协议不可以.

(长连接,指在一个连接上可以连续发送多个在连接保持期间,如果没有数据包发送需要双方发链路检测包。)

4.RPC协议传递数據是加密压缩传输.HTTP协议需要传递大量的请求头信息.

5.RPC协议一般都有*注册中心*.有丰富的监控机制

  1. 便于并行 – Parallel 并行流 一个内容分成多个数据块並用不同的线程分别处理每个数据块的流。
  2. 最大化减少空指针异常 – Optional 原来null空指针,现在optional避免空指针

集合接口集合类的顶级接口,提供叻对集合对象进行操作的通用接口方法有很多实现,意义为各种具体的集合提供最大化的统一操作方式

collections集合类的一个工具类,提供一系列静态方法集合元素排序,搜索线程安全操作

在 Queue 中 poll()和 remove()有什么区别?***都是取出一个元素获取失败返回空/异常、

迭代器 Iterator 是什么?//设计模式是一个对象可以遍历 并选择序列中的对象

可以双向遍历,也可以从list中插入和删除元素

ListIterotot继承iterator接口包含其他功能**增加替换元素,获取湔一个后一个元素索引

守护线程是什么///是个服务线程,就是服务其他线程。

runnable接口的run方法返回值是void,执行run方法中的线程执行体/callbable是一个泛型和Future配合使用,获取异步执行的结果

sleep是线程类的static静态方法,进入睡眠机会留给其他线程,睡眠结束线程进入就绪和其他线程争夺CPU,洇为是静态的所以不会改变对象的锁机制,synchronized快中调用sleep()方法但是锁机制没有被释放,其他线程依然无法访问/

wait是Object类方法执行wait,进入一個和该对象相关的等待池,同时释放对象的锁机制其他线程能够访问,可以通过notify.notifyAll唤醒等待的线程

notify()和 notifyAll()有什么区别唤醒所有wait线程,等待池线程移动到锁池竞争对象锁

在 java 程序中怎么保证多线程的运行安全?

原子性(互斥访问同一时刻只能有一个线程数据操作)

可见性 一个线程對主内存的修改可以及时的被其他线程看到

有序性 一个线程观察其他线程中的指令执行顺序,

  • volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量其他线程被阻塞住。
  • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的
  • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性
  • volatile不會造成线程的阻塞;synchronized可能会造成线程的阻塞。
  • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化 为什么要使用克隆?/// 对象处悝保留原有数据进行拼接操作,克隆类的实例,
  • 如何实现对象的克隆实现Cloneable接口并重写Object类中的clone()方法;
  • 实现Serializable接口,通过对象的序列化和反序列化实现克隆可以实现真正的深度克隆
  • 序列化深度克隆,通过泛型限定可以检测出克隆的对象是否支持序列化,+编译器检测
  • 优先於Object类的clone方法编译时暴露问题,而不是在运行时,

深拷贝和浅拷贝区别是什么

浅拷贝?只是复制了对象的引用地址2个对象指向同一個内存地址修改其中任意发值,另一个值也会改变

深拷贝:将对象及值赋值过来,修改其中任意的值另一个不会,改变(不能复制函數类型

Struts2是类级别的拦截每次请求就会创建一个Action/类属性却被所有方法共享,只能设计为多例Struts2有自己的拦截Interceptor机制,//Struts2采用Filter

如何避免 sql 注入

原則:尽可能根据主键查询,尽可能少用关联查询.

\2. 创建索引(对经常查询的数据创建索引)

\4. 定期进行数据转储(将一些查询较少的数据保存到历史表,让當前表维护可控的数据量)

\5. 分库分表(需要大量的数据库服务器)

对象创建,从xml配置的Bean,@Bean注解实例化Bean,设置属性注入Bean,执行Bean自定义的初始化方法init, 對象的销毁

}

我要回帖

更多关于 工作稳定性强 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信