java基础

数据类型:

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加载执行后会常驻服务器内存中,当再次受到客户端的请求时,服务器会产生新的线程而不是进程为客户端服务,这样就提高了响应速度。

 

原文地址:https://www.cnblogs.com/upward/p/11295510.html