学习小笔记

一、计算机基础类

1、http协议和https的区别

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

2、git协议,tcp/Ip协议

TCP/IP协议是Internet最基本的协议。由传输层的TCP协议和网络层的IP协议组成。

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。

Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议

它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。 要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文件 —— 它是 Git 协议守护进程为这个版本库提供服务的必要条件 —— 但是除此之外没有任何安全措施。 要么谁都可以克隆这个版本库,要么谁也不能。 这意味着,通常不能通过 Git 协议推送。 由于没有授权机制,一旦你开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。 不用说,极少会有人这么做。

Git 协议是现存最快的传输协议。如果你在提供一个有很大访问量的公共项目,或者一个不需要对读操作进行授权的庞大项目,架设一个 Git 守护进程来供应仓库是个不错的选择。它使用与 SSH 协议相同的数据传输机制,但省去了加密和授权的开销。

3、http协议的8种请求

get、post、put、detele、options、trance、head、connect

4、计算机的五大部分

运算器、控制器、存储器、输入设备和输出设备

二、前端知识类

1、fetch API
fetch(url)
.then((resp) => resp.json()) //转换成json对象
.then(function(data) {
    dom操作
  })
})
.catch(function(err){
  console.log(err)
})
2、echarts

https://echarts.baidu.com/

3、js事件委托

事件委托,通俗地来讲,就是把一个元素响应事件(click、keydown…)的函数委托到另一个元素;
利用冒泡的原理,把事件加到父级上,触发执行效果。

比如jQuery中的$(“table”).on(“click”,function());

把对于单元格点击的事件委托到表格的点击事件上

4、ECMAscript6语法
  • 新的变量(块级)let、(常量)const
  • rest 参数(形式为…变量名)
  • 箭头函数
  • for…of循环
  • 加入模块module等
5、node.js

Node 是一个让 JavaScript 运行在服务端的开发平台,
Node使用Module模块去划分不同的功能,以简化应用的开发

6、axios

轻量级,发送ajax请求的插件。

axios.post('/user', {
	firstName: 'Fred',
	lastName: 'Flintstone'
})
.then(function (response) {
	console.log(response);
})
.catch(function (error) {
	console.log(error);
});
7、MVVM

即模型-视图-视图模型。【模型】指的是后端传递的数据。【视图】指的是所看到的页面。【视图模型】mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。这两个方向都实现的,我们称之为数据的双向绑定。

三、数据库类

1、为什么大型企业项目不用外键约束

在删除一张表的纪录时,可能由于外键约束使删除失败,使开发过于复杂。

2、什么是sql注入,如何防止
String sql = "select * from user_table where username=

' "+userName+" ' and password=' "+password+" '";

当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=

'’or 1 = 1 -- and password='’

分析SQL语句:

条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;

应对方法:

(简单又有效的方法)PreparedStatement和正则验证
3、隔离级别
脏读:允许一个事务去读取另外一个事务未提交的数据。

幻读:一个事务只能读取另外一个事务已经提交的数据。

可重复读:使同一条数据库记录的读写按照一个序列化进行操作,不产生交叉。

序列化:让SQL按顺序读写,消除数据库事务之间并发产生的数据不一致性问题
4、复合主键和联合主键。

复合主键是一个表中 用两个字段来确定数据唯一性
联合主键则是用两个或多个表中的主键组合起来确定数据唯一性

5、B-Tree平衡树

B-Tree是为磁盘等外存储设备设计的一种平衡查找树。因此在讲B-Tree之前先了解下磁盘的相关知识。

系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。

6、索引、视图、触发器、存储过程
-- 索引
create index index_book on book_info(book_name);
-- 视图
create view book_view as ....
-- 触发器
create trigger tri_updinfo
after update on press_info for each row
	insert into t_log (notes) values ('update press_info');
end;
-- 存储过程
delimiter //
create produce pro_name
begin
	...
end//
delimiter ;
7、事务
1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

四、java类

1、jdk与jre的区别

JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。jre是运行环境

2、jdk8、9、10的区别和5之前最大的区别

JDK5:

1. 自动装箱与拆箱
2. 枚举
3. 静态导入,如:import staticjava.lang.System.out
4. 可变参数(Varargs)
5. 内省(Introspector),主要用于操作JavaBean中的属性,通过getXxx/setXxx。一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
6. 泛型(Generic)(包括通配类型/边界类型等)
7. For-Each循环
8. 注解

Java8

1.lambada表达式(Lambda Expressions)。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
2.方法引用(Method references)。方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,可以使语言的构造更紧凑简洁,减少冗余代码。
3.默认方法(Default methods)。默认方法允许将新功能添加到库的接口中,并确保兼容实现老版本接口的旧有代码。
4.重复注解(Repeating Annotations)。重复注解提供了在同一声明或类型中多次应用相同注解类型的能力。
5.类型注解(Type Annotation)。在任何地方都能使用注解,而不是在声明的地方。
6.类型推断增强。
7.方法参数反射(Method Parameter Reflection)。
8.Stream API 。新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。Stream API集成到了Collections API里。
9.HashMap改进,在键值哈希冲突时能有更好表现。
10.Date Time API。加强对日期和时间的处理。
11.java.util 包下的改进

Java9

1. java模块系统 (Java Platform Module System)。
2. 新的版本号格式。MAJOR.MAJOR.MINOR.SECURITY.SECURITY.PATCH
3. java shell,交互式命令行控制台。
4. 在private instance methods方法上可以使用@SafeVarargs注解。
5. diamond语法与匿名内部类结合使用。
6. 下划线不能用在变量名中。
7. 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。
8. Javadoc

Java 10

1. JEP286,var 局部变量类型推断。
2. JEP296,将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。
3. JEP304,统一的垃圾回收接口。
4. JEP307,G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。
5. JEP310,应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。
6. JEP312,ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。
7. JEP313,移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。
8. JEP314,使用附加的 Unicode 语言标记扩展。
9. JEP317,能将堆内存占用分配给用户指定的备用内存设备。
10. JEP317,使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。
11. JEP318,在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。
12. JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为\$FEATURE.\$INTERIM.\$UPDATE.\$PATCH,分别是大版本,中间版本,升级包和补丁版本。
3、环境变量的区别
环境变量分为系统环境变量和用户环境变量。 
你所说的环境变量是指系统环境变量,对所有用户起作用 
而用户环境变量只对当前用户起作用。
4、面向接口编程(POP)
开闭原则(Open-Closed Principle):对扩展开放,对修改关闭。
程序的世界里,接口的作用就是用于定义一个或一组规则,实现对应接口的实体需要遵守对应的这些规则。
5、GBK和UTF-8
GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,
另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。

UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,
那么建议你选择UTF-8编码。

UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,
才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的。

GBK编码格式,它的功能少,仅限于中文字符,
当然它所占用的空间大小会随着它的功能而减少,打开网页的速度比较快。
6、response.getWriter()和response.getOutpuStream()的区别;
说得简单一点就是:
getOutputStream就得到了outputStream是用来向客户端输入任何数据的(图片,音频等),输出字节。
getWriter是对outputStream进行了包装,用来输出字符用的。输出字符
7、什么是声明时的异常和运行时的异常。异常的分类
Throwable父类,分为error和Exception

error:类无法被编译,不能再jvm内运行。比如漏打,打错
Exception分为IOException和RuntimeException

运行时异常:
	运行时异常是可能被程序员避免的异常。与检查性异常相反,
	运行时异常可以在编译时被忽略。JVM会帮助我们解决的异常,
	但是如果不处理,程序会终止报错,用户体验不好。
检查时异常:
	最具代表的检查性异常是用户错误或问题引起的异常,
	这是程序员无法预见的。例如要打开一个不存在文件时,
	一个异常就发生了,这些异常在编译时不能被简单地忽略。
	必须进行处理如文件操作,数据库操作,以及自己想要进行的处理。提前进行处理,程序不会崩。
8、==和equals的区别
equals是比较内容是否相同,多用于引用数据类型

==是比较引用地址是否相同,一般多适用于基本数据类型比较
9、String与StringBuffere与Stringbuilder
1.首先最大的区别是String是不可变的,而StringBuffer和StringBuilder是可变的,
  即String为字符串常量,而StringBuilder和StringBuffer均为字符串变量
2.String和StringBuffer是线程安全的,而StringBuilder是非线程安全的
3.最后String是java.lang.String而StringBuffer和StringBuilder
  都是继承自AbstractStringBuilder(是一个抽象类)
4.执行速度:这三个类在进行操作时的速度关系为:StringBuilder > StringBuffer > String。
  由于String中进行操作时都会新建一个char[]数组代替原来的char[]数组,所以速度最慢
  StringBuffer线程安全,每个方法都有synchronized同步阻塞,所以操作速度受影响
  StringBuilder没有同步阻塞的限制,所以操作速度最快
5.使用场景:a 如果要操作少量的数据用 String;
		   b 单线程操作字符串缓冲区 下操作大量数据用 StringBuilder;
		   c 多线程操作字符串缓冲区下操作大量数据用 StringBuffer
10、JDBC中statement,preparedstatement,callablestatement的区别
Statement:用于对数据库进行通用访问,在运行时使用静态SQL语句时很有用。 Statement接口不能接受参数。
PreparedStatement:当计划要多次使用SQL语句时使用。PreparedStatement接口在运行时接受输入参数。
CallableStatement:当想要访问数据库存储过程时使用。CallableStatement接口也可以接受运行时输入参数。

Statement(接口)-> PreparedStatement(接口) -> CallableStatement(接口) 
11、堆、栈、队列、树
栈:一种动态集合,它是一种LIFO(last in first out后进先出)结构
栈的实现:(1)数组(2)链表

队列:与栈不同,它是一种FIFO(first in first out先进先出)结构
队列的实现:(1)数组(2)链表

树的种类:
(1)二叉树:二叉树要存储4个数据,分别是节点携带的信息和其父节点、左右子节点的指针。
(2)分支无限制的有根树

堆:实际上是以数组形式存储的二叉树
12、Servlet的生命周期

Servlet 生命周期:Servlet 加载—>实例化—>服务—>销毁。

静态代码块->构造方法->初始化->service->销毁

@WebServlet(name = "myUserServlet", 
    urlPatterns = "/user/test", 
    loadOnStartup = 1,  
    initParams = {
            @WebInitParam(name="name", value="小明"), 
            @WebInitParam(name="pwd", value="123456")
    }
)
public class UserServlet extends HttpServlet {
    private static final long serialVersionUID = 7109220574468622594L;
    
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
        System.out.println("servlet初始化...");
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter pw = response.getWriter();
        
        pw.append("Hello Servlet!<br>" );
        
        //servletName
        pw.append("servletName:" + getServletName() + "<br>");
        
        //initParam
        ServletConfig servletConfig = this.getServletConfig();
        Enumeration<String> paramNames = servletConfig.getInitParameterNames();
        while (paramNames.hasMoreElements()) {
            String paramName = paramNames.nextElement();
            pw.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "<br>");
        }
        pw.close();
    }
 
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
13、多线程
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,
一个进程中可以并发多个线程,每条线程并行执行不同的任务。

线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。

多进程是指操作系统能同时运行多个任务(程序)。

多线程是指在同一程序中有多个顺序流在执行。

继承java.lang.Thread类
实现java.lang.Runnable接口
14、反射
反射就是可以在运行时加载类信息,并可以创建其对象访问其属性和方法。
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
15、设计模式六大原则
开闭原则:对扩展开放,对修改关闭
里氏代换原则:任何基类可以出现的地方,子类一定可以出现
依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体
接口隔离原则:使用多个隔离的接口,比使用单个接口要好。
迪米特法则,又称最少知道原则:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立
合成复用原则:尽量使用合成/聚合的方式,而不是使用继承。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值