1、get和post方法的区别?
根据 RFC 规范:
GET 的语义是从服务器获取指定的资源
推理得到:GET 方法安全且幂等,因为GET只读,数据可以缓存在浏览器(保存为书签)/代理(nginx)中
POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同
推理得到:POST 因为会修改数据,所以不安全,因为重复请求会导致结果不一样,所以不是幂等的,综上POST请求不会被缓存,也不能保存为浏览器书签
2、http和https的区别?
协议:HTTP 即超文本传输协议,默认明文传输,不安全;HTTPS 在 TCP 和 HTTP 之间增加SSL/TLS 安全协议 加密传输
握手:HTTP TCP 三次握手即可传输 ; HTTPS 增加 SSL/TLS 的握手
端口:HTTP 80 ;HTTPS 443
建议跳转 小林
3、Linux常用命令?
文件相关(mv mkdir cd ls)
进程相关( ps top netstate )
权限相关(chmod chown useradd groupadd)
网络相关(netstat ip addr)
测试相关(测试网络连通性:ping 测试端口连通性:telnet)
4、Java中equals()方法和==的区别?
对于字符串变量
"=="比较内存中的首地址 ; "equals"比较字符串包含内容,因为Java中参数为string的equals是默认重写的
对于非字符串变量
如果没有重写equals方法,那么都是比较堆内存中的首地址
5、Java中基本数据类型?
8种
- 6种数值型:整数类型(byte、short、int、long)和浮点类型(float、double)
- 字符型:char
- 布尔型:boolean
6、Java多线程有哪些实现方式?
思想 > 代码
什么是:类似一心多用,一机多用
怎么实现
way1
1.定义一个类,继承Thread类,重写run方法(这个方法里面写线程的功能)。
2.然后分配和启动(实例对象调start方法,线程会执行run方法)这个子类的实例。
ps :main也是线程,我们称之为主线程,所以你可以在主线程里面先启动(必须调用start方法,否则不会创建一个线程)一个遍历10以内数字的线程,后在主线程里面遍历10以内的数字,你会发现主线程和主线程里面启动的线程是交替执行的(注意先后顺序)。
优点:编码简单
确定:已经继承了Thread,无法继承其他类,不利于功能扩展
way2
1.定义一个类,实现Runnable接口,然后在实现类中实现run方法,创建实现类对象(这里不叫线程对象,无法直接调start启动,这里叫线程任务对象,需要)
2.分配类的实例,在创建Thread实例时作为参数传递,即new Thread(p).start(),以启动线程
优点:任务类只实现接口,可以继续继承其他类,实现其他接口,扩展性强
缺点:多一个runnable对象
Note
匿名内部类写法
1.创建Runnable的匿名内部类对象
2.交给Thread线程对象
3.再调用线程对象的start启动线程
way3
独特优势:线程执行完毕允许返回数据,可以返回结果
1.实现Callable接口,重写call方法,封装要做的事情和要返回的数据
2.把Callable类型的对象封装程FutureTask(线程任务对象)
3.调用Thread对象的start方法启动线程
4.线程执行完毕后、通过FutureTask对象的get方法获取线程任务执行的结果
7、抽象类和接口的区别?
特点:
抽象类描述类的共同特性和行为 ;接口定义行为规范
区别:
- 实现方式
implements实现接口,extends继承抽象类,一个类允许实现多个接口,但只能继承一个抽象类
- 方法方式
接口只有定义,没有实现(jdk1.8 允许default方法体) ;抽象类定义并可实现方法
- 访问修饰符
接口成员变量默认为public static final,必须赋初值,不能被修改,其所有的成员方法都是public、abstract的 ;抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值,抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰, 必须以分号结尾,不带花括号
- 变量:
接口只能包含常量(即静态常量);抽象类可以包含实例变量和静态变量
8、事务的特性?
A 原子性(Atomicity)
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节,而且事务在执行过程中发生错误,会被回滚到事务开始前的状态
C 一致性(Consistency)
事务操作前和操作后,数据满足完整性约束,数据库保持一致性状态。
I 隔离性(Isolation)
数据库允许多个并发事务同时对其数据进行读写和修改的能力 , 隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的
D 持久性(Durability)
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
InnoDB 引擎通过什么技术来保证事务的这四个特性
- 持久性是通过 redo log (重做日志)来保证的
- 原子性是通过 undo log(回滚日志) 来保证的;
- 隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的;
- 一致性则是通过持久性+原子性+隔离性来保证;