-
通过jdk可以编写java程序
JDK、JRE、JVM有什么区别
- JDK: Java Development Kit 针对Java程序员的产品
- JRE:Java Runtime Environment是运行Java的环境集合
- JM:Java虚拟机用于运行Java字节码文件,跨平台的核心
-
-
输出:d1==d2 因为:浮点数在电脑里保存是按 科学计数法,值保存小数点后7位 解决方法:java bigdecimal类
-
生成30-100的随机整数
public Integer randomInt1() { int max = 100; int min = 30; int re = new Random().nextInt(max-min) + min; return re; } public Integer randomInt2() { int max = 100; int min = 30; int re = (int)(Math.random() * (max-min)) + min; return re; } -
列出1-1000的质数
public static void main(String[] args) { for (int i = 2; i <= 1000; i++) { boolean flag = true; for (int j = 2; j < i; j++) { if (i % j == 0) { flag = false; break; } } if (flag) { System.out.println(i); } } } -
面向对象三大特征:分装、继承、多态
封装:eg 接口
封装的好处:
- 实现专业的分工
- 减少代码耦合
- 可以自由修改类的内部结构
继承:java类不支持多继承,接口支持
7. 静态对象和实例变量的区别
- 静态变量在程序的整个生命周期内存在,直到程序结束或静态变量被显式销毁。
- 实例变量和静态变量存放在堆,静态变量存放在堆的永久生成区域中
- 执行顺序 代码块
- 1静态优先
- 2父类优先
- 3非静态块 优先于构造函数
- java的异常体系
- 字符串比较
t t f t f
因为s5是运行时才会确定,所以不s4==s5
s6存放在堆, 不在常量池
- String Stringbuffer stringbuilder
string存放在常量池
stringbuilder stingbuffer
- List与Set
-
List排序 Collections.sort()
-
TreeSet排序
- 自然排序
自然排序要求TreeSet集合中存储的元素所在的类必须实现Comparable接口,并重写comoareTo()方法,然后TreeSet集合就会对该类型使用compareTo()方法进行比较
this 在 o 前,为升序排列;
- 自定义排序
- Object类 hashCode()和equals() 的区别
先hashcode比较,在equals比较
- Java IO中的几种流
每个表的 第一行 代表顶层父类,下面几个才能使用
InputStreamReader 将输入字节流转换为输入字符流
17. 复制文件到指定文件夹
计算机网络
- 为什么分层:
通信是一个大问题,需要分成一个一个小问题 进行解决 分层设计:不同层实现不同功能
- 怎么分层
3.分层结构
- 概念总结
- 计算机网络分层结构
- OSI 7层(不适合市场)
应用层:用户与网络的界面;
- TCP/IP 4层
计算机网络(一)
6. TCP、UDP、IP分别属于什么层
各层数据结构:
-
网络中传输层的作用和包含的协议
-
HTTP1.0 1.1 2.0 区别
-
HTTP头-- keep-alive
HTTP2.0
- HTTP报文详解
- HTTP常用请求方法与使用场景
请求方法:HTTP请求的本质是对服务器资源进行操作的过程(增删改查+系统功能),通过定义不同方法实现不同操作是清晰并且是必要的。
• GET:最常用的方法,常用于请求服务器发送某个资源
• HEAD:和GET类似,但服务器在响应中只返回首部
• DELETE:请求服务器删除请求 URL 所指定的资源
-
常见状态码
-
200: OK请求没问题,实体的主体部分包含了所请求的资源
-
204: No Content的主体部分 响应报文中包含若干首部和一个状态行,但没有实体
-
304: Not Modified回任何资源 所请求的资源未修改,服务器返回此状态码时,不会返
-
400:Bad Request客户端请求的语法错误,服务器无法理解
-
401:Unauthorized 请求客户端在获取对资源的访问权之前,对自己进行认证
-
403:Forbidden 请求被服务器拒绝了
-
404: Not Found 用于说明服务器无法找到所请求的 URL
-
500:Internal Server Error 服务器内部错误,无法完成请求
-
502:Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 服务器宕机;504 网关超时;
- 对称加密与非对称加密
密钥:分为对称和非对称
对称加密:密钥a=密钥b
非对称加密:密钥a!=密钥b(公钥加密,私钥解密)
-
Hash---不能算 加密算法
MD5属于Hash算法
-
TLS技术--HTTPS加密认证的过程
TSL重点是 通过非对称加密算法 生成 对称加密算法的过程
在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制,标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1。也可以将TLS看作SSL的升级版
---------具体实现---------
双方拥有随机数123,并且随机数3是通过非对称加密传输给服务器的
- DNS服务--域名系统的工作流程
域名分级所以 域名服务器也会分级
- DNS安全---DNS攻击
现象:
攻击手段:
- DNS劫持:黑客攻击劫持地方运营商的DNS服务器
- 可以通过配置本地获得DNS服务器地址 避免
- DNS欺骗:冒充权威服务器
- DDoS攻击
防范手段: 采用更严格的访问控制;部署零信任方案;检查/验证DNS记录;接入高防服务
计算机网络(二)
16. TCP与UDP协议
UDP校验和:判断数据传输过程中是否出错
UDP与TCP协议:头部复杂度不同
17. TCP连接建立
- TCP为什么需要建立三次握手:因为TCP协议提供的是可靠的有连接服务
- 三次握手异常情况:
第一次握手报文丢失,当主动方认为第一次握手报文丢失 会再发第二次
所以需要第三次握手的确认,选择忽视丢弃4️⃣
- TCP四次挥手
第二次挥手报文和关闭等待阶段的发送的报文,会是之前没有发送完数据的报文;数据发送完 才会发送第三次挥手报文
TIME-WAIT时间设置为2倍MSL的时间
- TCP的可靠传输--滑动窗口
- 先是停止等待协议(单个发送、确认、超时重发)
- 滑动窗口,累计确认
- 停止等待协议+累计确认+滑动窗口 达到更好的效果 利用带宽
- TCP拥塞避免算法
-
网络拥塞往往由很多种因素引起,它并不是一个单点问题
-
拥塞避免是 全局角度的问题
-
拥塞避免的目的:防止过多数据注入到网络,避免网络中的路由器或链路过载
-
慢开始与拥塞避免:cwnd的增长趋势-称为慢开始
cwnd的增长趋势-称为慢开始(1,2,4,8)
cwn到达门限值后,执行拥塞避免算法;新的门限制=发生超时时的cwnd/2
-
快重传与快恢复
快恢复: 没有慢开始过程,直接拥塞避免的过程
21. TCP粘包原理
22. TCP协议安全性
- 防范手段还有 防火墙
- VPN-虚拟专用网技术
- VPN使用场景:公司内网、校园网、工业专用网
专用IP地址--即,内网IP地址
IPSec、PPTP、L2TP协议 保证隧道传输安全
总结:VPN工作原理(虚拟隧道、专用IP地址、协议,VPN工作在网络层)
操作系统
操作系统(一)
-
操作系统的进程
-
进程状态模型--同步 异步 阻塞 非阻塞
- 五状态模型:创建、就绪、终止、阻塞、运行
资源:磁盘 网卡等
进程调度是分配CPU资源
阻塞、非阻塞、同步、异步
阻塞状态:进程有等待,同步; 非阻塞状态:进程一直在运行,异步;
- 操作系统线程
进程的线程共享进程资源,线程本身不拥有资源的
多线程并不能提高运行速度,但可以提高运行效率,让CPU的使用率更高; 线程是CPU调度和分配的基本单位
- 用户态与内核态
简单来说内核态就是操作系统运行线程,用户态就是线程执行用户自己的程序。
内核态: 也叫内核空间,是内核进程/线程所在的区域。主要负责运行系统、硬件交互。
用户态: 也叫用户空间,是用户进程/线程所在的区域。主要用于执行用户程序。
- 操作系统资源管理
- 处理器资源;IO资源;存储器资源;文件资源
在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机N回就不足为奇了。 所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。 如此设计的本质意义是进行权限保护。
- 程序运行类型分析
- 计算密集型(可以通过多线程提升资源利用率和减少时间)
- IO密集型(可以通过提高存储器读写速度 减少时间)
- 协程是什么?为什么需要协程
上下文切换:会涉及用户态内核态的转换
协程:微线程、纤程、协作式线程
协程:只运行在用户态,内核无法感知,多个协程对应一个内核态的进程;协程由用户自行调度,内核无法感知。
- 协程 通过相互让步 实现协作式线程
协程的优缺点
- 调度、切换、管理更加轻量
- 内核无法感知协程的存在
- 可以减少上下文切换的成本,因为协程本身切换在用户态完成的
- 协程无法发挥CPU的多核优势
- 协程主要运用在多IO场景(网络IO)
调度管理总结:程序(program)只能有一个进程,一个进程就是一个程序。 有人说,我打开一个程序,比如chrome,有十多个进程呢,这是咋回事。那就是十多个程序,操作系统给他们分配了彼此独立的内存,相互执行不受彼此约束,分配同样时间的CPU。对于用户而言,他们是一个整体,我们通常称之为应用程序(application)。 对于计算机而言,一个进程就是一个程序,多个进程(比如一个浏览器的多个进程)对计算机而言就是多个不同的程序,它不会把它们理解为一个完整的“程序”。
所以正确的结论是:一个程序(program)就是一个正在执行的进程,而每个进程,可以是单线程的,也可以是多线程的。一个应用程序(application)通常由多个程序组成。
操作系统(二)
- 缓存的作用——存储器的层次结构
- 缓存
- 主存
- 辅存
局部性原理:是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。 两个层次都运用了局部性原理
系统设计中缓存(如,redis)的作用:
- 虚拟内存
背景:
概念:
- 逻辑地址空间---物理地址空间
虚拟内存运行概述:
高速缓存置换时机:
主存页面存置换时机:
总结:
9. 缺页中断——操作系统内存管理
- 内存管理:页式、段式、段页式
Linux页面大小一般为 4k
多级页表
页式存储缺点:有一段联系的逻辑分布在多个页面中,将大大降低执行效率
缺页中断: 在系统调用时就会进行进程切换
- LRU算法——页面置换算法
- 页面替换的时机:高速缓存替换的时机、主存页面的替换时机
- 实现页面替换的数据结构是 双向链表
缓存置换算法:先进先出算法FIFO、最近最少使用算法LRU、最不经常使用算法LFU
- 软链接与硬链接——Linux ext4文件系统
- 常见的文件系统:win(FAT、NTFS),linux(ext2/3/4)
FAT文件系统:使用一张表保存盘块的信息
- 服务器部署的RAID——磁盘冗余阵列
- RAID分级方案
- RAID0、RAID1、RAID5、RAID6、RAID10