技术点的积累
1.单列模式
特征:
- 只能有一个实例
- 要给其他类提供这一实例
懒汉式:第一次调用的时候实例自己
饿汉式:在类初始化的时候已经自行实例化
使用场所:线程池,缓存,对话框,打印机
2.IO流
https://blog.csdn.net/qq_42914528/article/details/82260537?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160379104319725225055672%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160379104319725225055672&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-82260537.first_rank_ecpm_v3_pc_rank_v2&utm_term=IO%E6%B5%81&spm=1018.2118.3001.4187
字节流:
- InputStream / OutputStream
- FileInputStream / FileOutputStream
- BufferedInputStream / BufferedOutputStream(缓冲流)
- ObjectInputStream / ObjectOutputStream(序列化流)
- ByteArrayInputStream / ByteArrayOutputStream(内存流)
字符流:
- InputStreamReader / OutputStreamWriter (转换流)
- FileReader / FileWriter
- BufferedReader(缓冲流)/ BufferedWriter (缓冲流)
- printwrite(打印流)
3.线程的生命周期
1.新建
2.就绪
3.运行
4.阻塞
5.死亡
4.电商网站中两个重要的概念
1.SPU
SPU是商品信息聚合的最小单位
2.SKU
SKU即出库进出量的单位
5.跨域(域名,协议,端口号)(非同源策略请求)
1.通过JSONP来实现跨域:通过script引入一个js文件,然后执行我们在URL参数中指定的函数,并且会把我们需要的json数据作为参数传入。需要服务端页面进行配合的。
原理:不同域名之间的js不能相互调用,但是js之间可以返回js脚本,使用JSONP来进行远程跨域访问,要约定数据格式。
2.通过修改document.domain来跨子域
3.使用window.name
4.使用http 代理的方式
5.使用ajax技术 (同源策略请求)
5.工厂模式
主要是为创建对象提供的过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活的目的。
6.ArrayList,vector,LinkedList
- 都实现了List接口
- ArrayList,vector底层都是数组实现的,都适合做查询
- LinkedList 是双向链表结构,适合做删除和新增
- ArrayList,LinkedList 是线程不同步的
- vector 线程同步的
容量增长:
ArrayList增长为原来的50%
vector增长为原来的一倍
7.set,list,map区别
set:无序,不可重复
list:有序,可以重复
map:储存键值对的数值,无序
8.HashMap,HashTable
- HashMap,HashTable都是储存key-value的数据结构,储存元素无序
- HashMap可以储存空的键和值,HashTable不可以
- HashMap是线程不安全的,HashTable是线程安全的(synchronize)
- HashMap效率高于HashTable
9.什么是JSON?
轻量级的文本数据交换格式
具有自我描述性,更容易理解
10.数据库连接池的作用
限定数据库的链接个数,不会由于数据库连接过多而导致系统运行缓慢或者崩溃
数据库连接不需要每次都去创建或者销毁,节约了资源,响应时间更快
11.Sting类常用的方法
indexOf() 返回指定字符串索引
length()返回字符串长度
subString()截取字符串
replace()替换字符串
trim()去空格
split()分割字符串
equals()字符串比较
12.内存泄漏
简单地说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。
13.序列化和反序列化
将对象按照某种协议格式(约定方式)放入buffer中,便于网络传输和储存,反序列化,将序列化的buffer按照序列化是时还原成原来的对象,这样程序就能直接使用对象了。
14.单点登录(sso)
在多个系统之间共享身份信息
15.solr
使用的是全文检索,其内部有个分词器(IK Analyzer)
16.Linux常用命令
- cd
- pwd
- Li
- Tail
- Rm -rf
- Vi
- Mkdir
- Rm - f
- tar
17.AJax
ajax就是异步的JavaScript和想xml。通过ajax可以与服务器进行数据交换,ajax可以使网页局部刷新,意味着可以在不用加载整个网页的情况下,对网页的某部分进行更新
18.存储过程
存储过程只在创建是进行编译,以后每次执行它都不会再进行编译,一般sql语句每次执行都会进行编译,所以存储过程速度快
存储过程可以重复使用,减少开发人代码量
存储过程安全性高
19.Cookie和session
- cookie可以存储在浏览器或者本地
- cookie只能储存String类型对象
- session储存在服务器上
- session储存任意java对象
- Session比Cookie更安全,
- Session占用服务器性能,过多会增加服务器压力
20.负载均衡
在提供多个相同服务器的情况下,负载均衡存在一个虚拟的IP地址,大量客户访问这个虚拟的Ip地址是,负载均衡设备会将这些报文请求根据负载均衡算法将流量均衡分配给后台服务器以平衡各个服务器的负载压力。
21.oop思想
oop是面向对象的编程,特征是:封装,继承,多态,抽象
22.网络编程协议UDP和TCP
UDP:用户数据报协议
特点:速度快,安全性低
TCP:传输控制协议
特点:速度慢,安全性高。通过三次握手建立连接,四次挥手断开连接。
23.反射机制
在java中,对于任意一个运行的对象,可以调用该对象的属性和方法;
已知一个类,可以获取这个类的所有属性和 方法,这就是反射机制
24.集群
有多台机器,这多台机器上都有数据库, 这些数据库的数据是完全一样的,即相当于一套数据的多个副本。集群就是要保证这些副本的实时或准时实(可以延时一会)的同步,即如果一台机器上的数据更改时,集群系统要保证这个更改实时或准时实的应用到所有的机器上,实现数据同步。
集群主要解决两个问题:
-
负载均衡:这个主要是解决访问量大的问题。一台机器的读写能力是有限的,当同时有大量用户访问的时候,仅一台机器可能就会因负载过大而垮掉。而使用集群后,集群系统会将访问量均衡到每台机器上,也即多台机器分担了访问量,这就达到了负载均衡的目的。
-
当机:当只有一台机器时,如果这台机器因意外当机会需要停机维护,那么此时系统就不能访问,对于一些使用量大,使用频繁的系统而言,这样是肯定不行的。如果使用集群,只有集群中有一台机器还在运行,就能让系统继续运行下去,而且对于重新启动的机器,能很快的同步在停机时间用户所做的更改。我的当前公司很喜欢用顶这个词,当一台机器垮掉时,能立马有另一台机器顶上
25.Tomcat运行原理
假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp
- 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
- Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
- Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
- localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
- Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
- path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
- Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser
26.反向代理
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色
27.文件上传
文件上传:我们在做文件上传的时候,使用的了一个插件,这个插件叫做富文本编辑器(KingEditor)
它要求返回指定的数据格式
28.Redis主从复制
Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。
为什么要用 Redis /为什么要用缓存
主要从“高性能”和“高并发”这两点来看待这个问题。
高性能:
假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!
高并发:
直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库
29.Spring MVC 和Spring boot区别
- 首先这两者专注的领域不同,解决的问题也不一样
- Spring MVC是基于 Servlet 的一个 MVC 框架,通过Dispatcher Servlet,
ModelAndView解决 WEB 开发的问题.但是它的配置繁琐,大量
.xml、.properties文件。并且用maven管理项目的时候很容易出现jar包冲突。 - 而Spring Boot 是web应用的整合,包括了spring mvc的封装,解决web开发配置麻烦的问题(简化SSM配置麻烦的问题),使用嵌入式的servlet容器,无需打成war包,自动化的配置,无需配置XML文件,并且starters自动依赖。
- 但他们的基础都是Spring 的 IOC 和 AOP
- spring mvc 打包后是war包,spring boot 是jar包
30.接口和抽象类的区别
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4.抽象类中可以包含静态方法,接口中不能包含静态方法
5.一个类可以实现多个接口,但只能继承一个抽象类。