数据类型:
byte 1字节
shotr 2
int 4
long 8
char 2
float 4
double 8
boolean 1
面向对象特性
封装 :将对象实现细节隐藏起来,通过公共方法向外暴露对象功能
继承:子类继承父类,直接或间接获取父类的成员
多态:直接把子类赋值给父类变量,但是运行时依然表现出子类的行为特征
抽象:从已经存在的事物中抽象出所关注的行为,特性。
重载:同一类中,方法名相同,参数列表不同
重写:继承父类,方法及签名相同 ,@Override标签判断
基本类型和包装类型:
基本类型:默认值为0 存在于 栈
包装类型:默认值 null,对象 存在于 堆
集合中只能存储对象
抽象类和接口:
抽象类:不能创建实例,无方法体,子类实现,可包含抽象方法 普通方法 构造方法
接口:是一种规范,N中方法的特征集合,无构造方法 可包含抽象方法
类之间是单继承关系 接口和实现类 实现关系
抽象用于 某些相同事物概念(相同属性)的抽取, 使用抽象类是为了代码的复用
接口是为了实现多态性(特性,行为)
数组:存储相同类型的集合
设计模式:
享元模式:共享同一元素,常量池中
单例模式:暴露对外方法
责任链模式:单独开发
适配器模式:接口和抽象类
stringbuffer(安全)、stringbuilder(不安全)
集合分为 colletion 和map(双序)
collection:
List:arrarylist 、linkedlist、vector(安全的)(有序,可重复)
set:hashset、treeset (无序,不重复)
map:hashmap(数组+链表结构,可存null)、treemap,hashtable(安全的)(key-value)
arrarylist 动态数组 效率高 查询快,增删慢,默认大小10,插入数据,判断大小,改变内存存储
linnkedlist:链表结构 查询慢,增删快,首尾连接
hashset去重原理:通过hashcode找到对应hash值,通过运算找到该元素的在hash表的存储位置,
如果目前没有任何元素存储,则直接存储,若已存在其他元素,调用equals判断比较,若是ture,则重复,不允许添加,false则添加
HashMap 非线程安全 TreeMap 非线程安全
HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。
TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
遍历map:四种
获取key value :entryset
通过key 获取value
单独获取 ketset
迭代器遍历 entryse().iterator
常用类: string、until、math、date、sql
常见异常: 数组下标越界 空指针 io异常 算数异常 类转换异常 文件找不到异常 类找不到异常
数据库:左右链接,内连接,索引 explain 判断索引
索引 :explain查看是否有索引 index(不重复索引) ref()
存储过程:
一个简单的存储过程
create procedure porcedureName ()
begin
select name from user;
end;
存储过程用create procedure 创建, 业务逻辑和sql写在begin和end之间。mysql中可用call porcedureName ();来调用过程。
触发器:触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。
在 triggers 表中查看触发器信息
事务:
原子性:要么发生 要么不发生
一致性:保证数据的完整性
隔离性:每一位用户的事务不被干扰
持久性:一旦改变 保持永久
悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁 ,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁 插入 写 场景
乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。 一种版本号机制 读场景
死锁:多个进程抢夺资源造成的
原因:
互斥条件:一段时间内,某资源仅为一进程占有
请求和保持条件:请求资源阻塞时,对已获得资源不放
不剥夺条件:进程已获得资源未使用完时,不能剥夺,自动释放
环路等待条件:存在环形连
实现多线程:根据返回值 分为两大类
一类:继承Thread和实现Runnable ,
二类:实现Callable重写call()传给FutureTask对象,最大的不同是Callable能返回一个异步处理的结果Future对象并能抛出异常
redis:缓存数据库
,可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。
Redis支持的数据类型?
String Hah List set sortset
什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?
把数据写到磁盘中去,
两种方式:RDB(默认) 、AOF
存储结构:
内容是redis通讯协议(RESP )格式的命令文本存储。
比较:
1、aof文件比rdb更新频率高,优先使用aof还原数据。
2、aof比rdb更安全也更大
3、rdb性能比aof好
4、如果两个都配了优先加载AOF
RESP 是redis客户端和服务端之前使用的一种通讯协议;
、Netty和Tomcat有什么区别?
Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。
有人说netty的性能就一定比tomcat性能高,其实不然,tomcat从6.x开始就支持了nio模式,并且后续还有arp模式——一种通过jni调用apache网络库的模式,相比于旧的bio模式,并发性能得到了很大提高,特别是arp模式,而netty是否比tomcat性能更高,则要取决于netty程序作者的技术实力了。
为什么Netty受欢迎?
netty是一款收到大公司青睐的框架,在我看来,netty能够受到青睐的原因有三:
并发高
传输快
封装好
Netty为什么并发高
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。
.什么是Servlet
简单的说Servlet使用Java语言实现的程序,运行于支持Java语言的Web服务器或者应用服务器中。Servlet先于JSP出现,提供和客户端动态交互的功能。Servlet可以处理来自客户端的HTTP请求,并生成响应返回给客户端。
Servlet对于Web服务器而言,就好像是Java Applet对于Web浏览器,Servlet需要加在到Web服务器并在Web服务器内执行。
使用Servlet的基本流程如下:
客户端通过HTTP提出请求。
Web服务器接受改请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
Servlet将接收该HTTP请求执行某种处理。
Servlet将向Web服务器返回应答。
Web服务器将从servlet收到的应答发送给客户端。
Java Servlet API 是Servlet容器(tomcat)和Servlet之间的接口,它定义了一个Servlet的各种方法,还定义了Servlet容器传给Servlet的对象类,其中最重要的就是ServletRequest和ServletResponse。所以我们在编写Servlet时,需要实现Servlet接口,按照其规定进行操作。
二.Servlet的优点:
1.可以移植性:
由于Servlet是用Java语言编写的,因此它可以在不同的操作系统和服务器上移植。
2.安全:
Servlet也具有类型检查特征,并利用Java的垃圾收集和没有指针的设计,使得Servlet避免了内存管理等问题。
3.高效:
Servlet加载执行后会常驻服务器内存中,当再次受到客户端的请求时,服务器会产生新的线程而不是进程为客户端服务,这样就提高了响应速度。