Java基础知识(二)

sqlite:

sqlite在哪里用、什么时候用数据库、为什么要用数据库(用文件File不就可以吗)、
sqLite是一个SQL数据库引擎,主要在一些小型的本地应用中使用,
用于存储应用的持久层数据,它区别于自定义文件的地 方在于它是一个关系型数据库管理系统,
在程序中可以通过数据库驱动通过使用SQL语句对其进行高效的增删改查操作,同时它也是线程安全的

使用:SQLite适用于中小规模流量的网站.适合读多写少的网站

sqlite的特点

(大小、访问模式、安全性、效率性、数据连接、存储模式…)、
大小:SQLite是一款轻型的嵌入式数据库.它的数据库就是一个文件.
访问模式:
安全性:缺乏用户管理和安全功能,不支持加密功能

效率性:性能高
数据连接:不能远程服务,单机版
存储模式:一个SQLite 数据库是存储在一个单一的跨平台的磁盘文件
sql语法:左右连接特点、内连接特点、or和and区别,where和inner join on、having区别
左连接:保留左表数据,匹配右表,右表没有的null补齐
右连接:保留右表数据,匹配左表,左表没有的null补齐
内连接:左连接和右连接的交集部分
Or就是或的意思,只要一个条件成立就行
And是并且的意思,是所有条件都要成立

执行顺序:on是最先执行,where次之,having最后
on是在生成中间的临时表时起作用的,where,having是生成临时表之后对连接表再进行过滤
sql约束:非空、checked、unique、default、主键、外键
特别是外键约束(作用?不用外键约束行吗)
保持数据一致性,完整性,不使用外键也可以
视图的使用?
自增长是如何做到的?
创建一个序列名sequence,insert语句的时候,主键写成序列名.nextval

DAO:

Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,
action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过hibernate操作数据库)打交道的事情全是ta管
dao全称是什么?为什么使用dao,dao属于什么方面的层,dao如何使用;
数据访问对象 Data Access Object,属于数据访问层
比如说你要你要插入一个新的用户…那么.在DAO中我们只需要提供一个insertUser(User user)这一个方法就可以了…具体的操作是在DAO中实现的…
那么对于要调用DAO的时候.我们只要知道insertUser(User)是用来插入一个新的用户…而不需要知道是如何实现的…
在dao方面你使用了哪几种设计模式
工厂模式,接口+实现类

集合框架:

数组和集合框架的区别
数组既可以存储基本数据类型又可以存储引用数据类型
集合只能存储引用数据类型
数组长度是固定的,不能增长
集合长度是可变的
List的种类、作用、是否线程安全?每一种List的数据存储方式、List的常用方法、
口的实现类有ArrayList与LinkedList,Vector,
ArrayList:底层由数组结构实现,数组在内存中的存储顺序是连续的,对集合中的元素可以进行快速访问,更适合用来随机查询数据。
LinkedList:底层由双向链表结构实现,通过节点来存储下一个元素的位置,对集合中的元素可以方便的增加与删除,更适合用于大量修改。
Vector:Vector与ArrayList的区别就是Vector是线程安全的集合,在需要线程安全而且对效率要求比较低的情况下,使用Vector。
常用方法:add,remove,get
Map的种类、作用、是否线程安全?每一种Map的数据存储方式、Map的常用方法、
map就像我们手机的电话本,键值对存储,拿到key就能得到对应的value
hashMap 线程不安全,无序
linkedHashMap 按照元素put的顺序保存 不安全
treemap 可以定义 comparator 自定义排序规则
常用方法:put,clear,get
这两种技术你使用在什么方面?
Map一般用来存储ajax请求返回的数据,lIst用来存储数据库搜索的数据
泛型你用过吗?用在什么地方,这技术好处是什么?
一般用在不确定数据类型的地方,省去强转代码,

文件操作:

流式IO和非流式IO区别
这就好比到餐厅吃饭,每来一桌客人,都有一个服务员专门为你服务,从你到餐厅到结帐走人,
这样方式的好处是服务质量好,一对一的服务,VIP啊,可是缺点也很明显,成本高,如果餐厅生意好,
同时来100桌客人,就需要100个服务员,那老板发工资的时候得心痛死了,这就是传统的一个连接一个线程的方式。
由阻塞服务方式改为非阻塞服务了,客人吃着的时候服务员不用一直侯在客人旁边了。传统的IO操作,比如read(),
当没有数据可读的时候,线程一直阻塞被占用,直到数据到来。NIO中没有数据可读时,read()会立即返回0,线程不会阻塞

InputStream和OutputStream -》 流式IO的读和写 (能返回吗?) -》 不能,也就是只能往下读,不能回退
非流式IO:可以回退,可以指定一个位置的字节进度开始读取 (我们迅雷的断点续传以及分包下载) - NIO
RandomAccessFile

流式IO的分类

字节流和字符流的区别
字节输入流和输出流的祖先:InputStream和OutputStream
字符输入流和输出流的祖先:Reader和Writer
字节流可以处理所有文件类型的数据(图片,视频,文本·····),字符流只能处理纯文本数据(txt文本文档)
项目中文件、图片的传输就都是用字节流来传
BufferInputStream的使用,以及特点
BufferInputStream是缓冲字节输入流,
FileInputStream在读取文件的时候,一滴一滴地把水从一个缸复制到另外一个缸
BufferInputStream则是一桶一桶地把水从一个缸复制到另外一个缸。
特点:读取到一个字节/字符,先不输出,等凑足了缓冲的最大容量后一次写出去,从而提高了工作效率

装饰流干什么用的?

装饰流是什么? 只要这个流,初始化的时候,在构造方法中传入的是另一个流,那么这个流就属于装饰流范畴
InputStreamReader -》 字节流转换成字符流
装饰流就是将 介质流进行美化(优化)
例如:字节流 -》 字符流
读取效率提高 -》 BufferedInputStream
介质流是什么? 只要这个流,初始化的时候,在构造方法中传入的是File或文件路径,那么这个流就是介质流
也就是说介质流和文件对接,装饰流和介质流对接

在项目中你是否使用了文件操作呢?

导出Excel下载到浏览器
线程:
生命周期
新建 New
就绪 Runnable
运行 Running
阻塞 Blocked
死亡 Dead

1.线程特点

线程的实现方式有哪些?你觉得那种比较好
继承Thread类
实现Runnable接口
实现接口好,扩展性好
线程同步你用了那种技术?你还了解哪些的线程同步技术。
sync…的使用场景、如何使用

public class ServiceFactory {
	private static ServiceFactory factory;
	private ServiceFactory() {
		
	}
	public static ServiceFactory getInstance() {
		if(factory == null) {
			factory = new ServiceFactory();
		}
		return factory;
	}
}

如果项目启动第一次,两个用户AB同时访问service层,同时调用ServiceFactory.getInstance()
那么这个就不叫做单例了

解决手段:
// 饿汉式
// private static ServiceFactory factory = new ServiceFactory(); 
private static ServiceFactory factory ;
private ServiceFactory() {
	
}

// 懒汉式
public static synchronized ServiceFactory getInstance() {
	if(factory == null) {
		factory = new ServiceFactory();
	}
	return factory;
}

synchronized:

同一时间内多个用户需要访问同一个方法时,也必须一个个执行对应的方法

wait和notify的使用,特点
调用wait方法,首先会获取监视器锁,获得成功以后,会让当前线程进入等待状态进入等待队列并且释放锁;
然后当其他线程调用notify或者notifyall以后,会选择从等待队列中唤醒任意一个线程,而执行完notify方法以后,
并不会立马唤醒线程,原因是当前的线程仍然持有这把锁,处于等待状态的线程无法获得锁。
必须要等到当前的线程执行完按monitorexit指令以后,也就是锁被释放以后,处于等待队列中的线程就可以开始竞争锁了.

wait和notify为什么需要在synchronized里面

wait方法的语义有两个,一个是释放当前的对象锁、另一个是使得当前线程进入阻塞队列,
而这些操作都和监视器是相关的,所以wait必须要获得一个监视器锁
而对于notify来说也是一样,它是唤醒一个线程,既然要去唤醒,首先得知道它在哪里?
所以就必须要找到这个对象获取到这个对象的锁,然后到这个对象的等待队列中去唤醒一个线程。

wait和sleep的使用,区别

1,来自的类不同,sleep方法来自Thread,wait方法来自Object
2,sleep方法是线程内部方法,没有释放对象的锁,而wait方法释放了对象锁,使得其他线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll是对象操作方法,必须在同步下进行,只有在synchronized里面使用,而sleep可以在任何地方使用。
4,两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题,就需要激活才会进入runing状态。
socket:

七层网络协议

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
说一下tcp和udp的区别,socket是属于哪一个? tomcat属于哪一个?
Tcp是一种网络通信协议,面向连接(打电话),数据安全的(保证数据的完整)
udp是用户数据报协议,:面向无连接(发短信),数据不安全(丢包)
TCP传输效率比UDP低
SOCKET使用的就是tcp协议,而tomcat是udp
tcp和udp属于七层网络协议的哪一层
传输层

C/S框架特点,优缺点

CS是客户机和服务器结构
优点:
(1)界面和操作可以很丰富
(2) 安全性能可以很容易保证,实现多层认证也不难
(3)由于只有一层交互,因此响应速度较快。
缺点:
(1)适用面窄,通常用于局域网中
(2)用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户
(3)维护成本高。发生一次升级,则所有客户端的程序都需要改变。

socket和tomcat的区别

socket是对TCP/IP协议的封装,Tomcat相当于是serverSocket,用来装载运行War项目的。

为什么我们企业中不使用socket进行框架搭建
socket和tomcat的区别
socket和ServeSocket属于应用型的服务器
tomcat属于容器型的服务器

从效率和稳定性安全性方面进行讲解

容灾:

出现的问题如何解决
断线重连
异常判断
断点续传
粘包、断包

也就是说,当出现某些意外情况的时候,服务器会记录下你已经下载到多少了,下次会从这个位置的字节开始
继续下载(将字节发给客户端)

粘包、断包:
客户端发送数据量很大,导致服务器来不及接收
客户A:Hello x 1  服务器:返回World
客户A:Hello x 1000000 ,有概率出现: HelloHel,两条消息粘住,并且数据不完整
	而下次收到的消息: loHell
解决方案:readLine,收消息是通过 换行符来进行判断,数据是否结束,如果结束不再往下读取了
	
JMF: 媒体(不会考)

JSON:在什么时候用,为什么用,如何使用,他是啥?JSON的使用方式
什么时候用:前端ajax数据传输的时候以及后端返回数据,

为什么:代码量少,编码简单,传输的数据比较清晰,主流的浏览器都支持
如何用:导入fastjson包,传输的数据写法按一个key对应一个value,或是直接用map存储传输
是啥:JSON就是一种数据交换的格式
其他:设计模式、数据库连接池、线程池、数据安全(MD5)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值