计网基础知识复习
说起来并不打算写这部分的,毕竟之前学过计网,但是发现面试考的地方有的还挺深
所以还是边背边写吧
计算机网络概述
计算机网络(简称网络)把许多计算机连接在一起,而互联网把许多网络连接在一起,是网络的网络。
计算机网络最常用的性能指标是:速率,带宽,吞吐量,时延(发送时延,处理时延,排队时延),时延带宽积,往返时间和信道利用率。
五层体系结构由应用层,运输层,网络层(网际层),数据链路层,物理层组成。运输层最主要的协议是 TCP 和 UDP 协议,网络层最重要的协议是 IP 协议。
物理层二进制比特
链路层
数据链路层使用的主要是点对点信道和广播信道两种。以及这两种信道所使用的协议(PPP 协议以及 CSMA/CD 协议)的特点
数据链路层传输的协议数据单元是帧。数据链路层的三个基本问题是:封装成帧,透明传输和差错检测
循环冗余检验 CRC 是一种检错方法,而帧检验序列 FCS 是添加在数据后面的冗余码
点对点协议 PPP 是数据链路层使用最多的一种协议,它的特点是:简单,只检测差错而不去纠正差错,不使用序号,也不进行流量控制,可同时支持多种网络层协议
PPPoE 是为宽带上网的主机使 ...
java基础篇2
Q:Java 中的异常处理(重要)Java 异常类层次结构图
在 Java 中,所有的异常都有⼀个共同的祖先 java.lang 包中的 Throwable 类。 Throwable 类有两个重要的⼦类 Exception (异常)和 Error (错误)。 Exception 能被程序本身处理( trycatch ), Error 是⽆法处理的(只能尽量避免)。
Exception :程序本身可以处理的异常,可以通过 catch 来进⾏捕获。 Exception ⼜可以分为 受检查异常(系统编译前 必须处理 try catch/ throws) 和 不受检查异常(可以不处理)。
Error : Error 属于程序⽆法处理的错误 ,我们没办法通过 catch 来进⾏捕获 。例如,Java 虚拟机运⾏错误( Virtual MachineError )、虚拟机内存不够错误( OutOfMemoryError )、类定义错误( NoClassDefFoundError)等 。这些异常发⽣时,Java虚拟机(JVM)⼀般会选择线程终⽌
Throwable 类常⽤⽅法
public str ...
java 基础篇1
嗨,这里是涛涛子专门为了面试八股简历的博客部分,为了精简内容 ,八股的答案部分有时简略,或者附上答案链接,遇到经典的问题会动手回答一下
java基础Q:⾯向对象和⾯向过程的区别
Q: JDK JRE JVM
JDK:
Java程序的运行环境-JRE
JVM java虚拟机
jvm有自己完善的硬件架构,如处理器、栈区、寄存器等。
jvm是一个虚拟的中间平台,只负责将编译后的字节码文件转换成当前计算机能理解并执行的指令,其他都不关心。jvm是java“一次编译,到处执行”的原因。
核心类库 java.lang java.utils 等
Java的基础类库(Java API)重要的语法结构和基本的线程、图形和IO等
Java的一些工具包(JDK的bin目录下)(其中包含了javac源码编译器,还有一些其他的命令:jdb,javah,jmp等)
Q: 面向对象语言的特点
Q: Java 和 C++的区别都是⾯向对象的语⾔,都⽀持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ ⽀持多重继承;虽然 Java 的类不可以多继承 ...
java 线程状态
Q: 简述线程、程序、进程的基本概念。以及他们之间关系是什么?程序是含有指令和数据的文件,被存储在磁盘或其他数据存储设备中,也就是说程序是静态的代码。
进程是程序的⼀次执⾏过程,是系统运⾏程序的基本单位,系统运⾏⼀个程序即是⼀个进程从创建,运⾏到消亡的过程。
线程是进程划分成的更⼩的运⾏单位,线程是处理器任务调度和执行的基本单位。线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。
Q: java线程的状态状态一种是将其分为6种一种是分为5种
6种(主要是从java代码的角度来进行划分。)
新建状态(NEW) :
使用new关键字创建一个thread对象,刚刚创建出的这个线程就处于新建状态。在这个状态的线程没有与操作系真正的线程产生关联,仅仅是一个java对象。
可运行(RUNABLE):
正在进行运行的线程,只有处于可运行状态的线程才会得到cpu资源。
阻塞(BLOCKED) :
在可运行阶段争抢锁失败的线程就会从可运行—->阻塞
等待(WAITING) :
可运行状态争抢锁成功,但是资源不满足,主动放 ...
linux常用命令
Vi编辑器用vi 或者 vim 打开一个文本文件或者配置文件如
vi /etc/ssh/sshd_config
vi编辑器有三中模式: 命令模式、编辑模式、底行模式(转义模式)
进入编辑器首先会进入命令模式,命令模式是其他两个模式转换的中间层
命令模式
任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令行模式
编辑模式
在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令行模式下,按”ESC”键即可
底行模式
常用的命令:
:q 退出;:q!
不保存退出;:w
保存;:w!
强行保存;:wq
保存退出:wq! 强制保存并退出 (常用)
grep 命令grep命令_Linux grep命令:文本搜索工具(可使用正则表达式)
一般我们在 有命令结果的 命令下 ...
JDK监控以及故障处理工具
JDK 命令行工具这些命令在 JDK 安装目录下的 bin 目录下
jps (JVM Process Status): 类似 UNIX 的 ps 命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;
jstat ( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据;
jinfo (Confifiguration Info for Java) : Confifiguration Info forJava,显示虚拟机配置信息;
jmap (Memory Map for Java) :生成堆转储快照;
jhat (JVM Heap Dump Browser ) : 用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果;
jstack (Stack Trace for Java):生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。
jps :查看所有 Java 进程jps (JVM Process ...
JVM笔记-JVM内存结构
1、JDK JRE JVM?
JDK:
Java程序的运行环境-JRE
JVM java虚拟机
jvm有自己完善的硬件架构,如处理器、栈区、寄存器等。
jvm是一个虚拟的中间平台,只负责将编译后的字节码文件转换成当前计算机能理解并执行的指令,其他都不关心。jvm是java“一次编译,到处执行”的原因。
核心类库 java.lang java.utils 等
Java的基础类库(Java API)重要的语法结构和基本的线程、图形和IO等
Java的一些工具包(JDK的bin目录下)(其中包含了javac源码编译器,还有一些其他的命令:jdb,javah,jmp等)
2、java程序的执行过程编译阶段: java 文件 编译器把 .java 源代码文件编译成 .class 字节码(二进制)文件
运行阶段:Java类加载器将 .class 字节码文件加载到内存,在 JVM 中进行解释并生成可执行代码
运行阶段最重要:
类加载器讲字节码文件加载到 JVM 内存中运行
类放在放在方法区
类的实例对象放在 堆内存
队中的对象调用方法是会用到 虚拟机栈、程序计数器、本地方法栈中
...
java基础篇4 线程池原子类
线程类的执行方式一、runnable的执行 , 作为thread的参数
public class MyRunnable implements Runnable {
@Override
public void run() {
// 在这里定义可在线程中执行的代码
}
}
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
or
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 在这里定义可在线程中执行的代码
}
});
thread.start();
二、callable的执行,被ExecutorService执 ...
JAVA对象的创建过程
1 java类的生命周期(总体流程)大致分为 类加载 使用(实例化) 卸载三个阶段
如果只说创建的话更偏向于下面两个阶段
类构造器完成类初始化(赋予静态变量默认值),也即类加载阶段
类实例化(分配内存、赋予默认值、执行定制化赋值操作),我们今天重点讲类实例化的步骤
上图 类加载种 验证——准备——解析 称为 连接阶段 (除了解析外,其他阶段是顺序发生的,而解析可以与这些阶段交叉进行,因为Java支持动态绑定(晚期绑定),需要运行时才能确定具体类型;在使用阶段实例化对象)
上图主要注重 类加载的过程
实例化阶段可以被细分为如下过程(下面我们就要开始以这个图为核心讲解 类实例对象创建的过程
整个创建对量的流程可以这样表述
类的初始化和实例化初始化(类加载)和实例化(使用时)是两个不同的阶段
类的初始化 <cinit>是完成程序执行前的准备工作。在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会开辟一块存储空间用来存放静态的数据。初始化只在类加载的时候执行一次
主要职责:
类的构造器调用(<cinit>),初始化相关静态代码块以及静态变量的 ...
java 基础篇 String类
本章记录关于String类型的一些常见问题
String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的?可变性
String 不可变
String底层是用字符串数组实现的,String 类中使⽤ final关键字修饰字符数组来保存字符串, private final char value[] ,所以 String 对象是不可变的。
在 Java 9 之后,String 类的实现改⽤ byte 数组存储字符串
⽽ StringBuilder 与 StringBuffer 都继承⾃ AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使⽤字符数组保存字符串 char[] value 但是没有⽤ final 关键字修饰,所以这两种对象都是可变的。
线程安全性,性能
String 中的对象是不可变的,也就可以理解为常量,线程安全。所谓的更改字符串,都会⽣成⼀个新的 String 对象,然后将指针指向新的 String对象。大量数据时不宜使用。
StringBulider 与 ...