- 今天去面试,笔试题目和面试官的几个问题给我印象深刻,做个记录。
ipv4和ipv6
- IPv4使用32位(4字节)地址,一般以点分十进制的xxx.xxx.xxx.xxx来表示,其中每3位代表一个8位的二进制数。 8位的二进制数可表示最大的值为28-1,因此转换成点分十进制后,每段IP地址的取值范围在0~255之间。
- IPv6 地址大小为 128 位(16个字节)。首选的 IPv6 地址表示为:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,其中每个 x 是代表一个 4 位的十六进制数字。IPv6 地址范围从 0000:0000:0000:0000:0000:0000:0000:0000 至 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。
国际标准化组织(ISO)定义了基于 OSI 模型的 internet 网络通信协议组
- 为什么有这个东西
ISO为了更好的使网络应用更为普及,就推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。根据分而治之的原则 - 由下至上为1至7层,分别为:
应用层(Application layer)
表示层(Presentation layer)
会话层(Session layer)
传输层(Transport layer)
网络层(Network layer)
数据链路层(Data link layer)
物理层(Physical layer)
其中上三层称之为高层,定义应用程序之间的通信和人机界面。什么意思呢,就是上三层负责把电脑能看懂的东西转化为你能看懂的东西,或把你能看懂的东西转化为电脑能看懂的东西。
下四层称之为底层,定义的是数据如何端到端的传输(end-to-end),物理规范以及数据与光电信号间的转换。
String、StringBuffer、StringBuilder有什么区别?
String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。
StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类,提供append和add方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列,把所有修改数据的方法都加上了synchronized。但是保证了线程安全是需要性能的代价的。
在很多情况下我们的字符串拼接操作不需要线程安全,这时候StringBuilder登场了,StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。
StringBuffer 和 StringBuilder 二者都继承了 AbstractStringBuilder ,底层都是利用可修改的char数组(JDK 9 以后是 byte数组)。
所以如果我们有大量的字符串拼接,如果能预知大小的话最好在new StringBuffer 或者StringBuilder 的时候设置好capacity,避免多次扩容的开销。扩容要抛弃原有数组,还要进行数组拷贝创建新的数组
- 总结
1、在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明,少量的字符串操作(拼接,删除等)。
2、在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String"+"来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。
3、在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等。
Java中访问修饰符public、private、protect、default范围
public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不
仅可以跨类访问,而且允许跨包(package)访问。
private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以
及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、
属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访
文件流操作
- 将数据写入文件
package priv.lg.file.tools;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class FileWrite {
public void writeFile(File file,int[] ary){
try {
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
for(int i=0;i<ary.length;i++){
//System.out.print(ary[i]);
bw.write(ary[i]+" ");
}
bw.flush();
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void writeFileByBytes(File file,String connect){
try {
FileOutputStream fos = new FileOutputStream(file);
byte[] date=connect.getBytes("UTF-8");
fos.write(date);
fos.flush();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
String path="D:/txt.txt";
//FileCreate fc = new FileCreate();
//fc.fileCreate(path);
File file = new File(path);
FileWrite fw = new FileWrite();
int[] arys={1,2,3,4,5};
//String arys="s睡大觉12313";
fw.writeFile(file, arys);
fw.writeFileByBytes(file, "123456");
- 将数据从文件中读出
package priv.lg.file.tools;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class FileRead {
public void readFile(File file){
try {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String str = null;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
FileRead fr = new FileRead();
fr.readFile(new File("D:/txt.txt"));
}
}
- IO的操作部分重点掌握两个代码模型。IO的核心组成就是五个类(File、OutputStream、InputStream、Reader、Writer)一个接口(Serializable)
查看和终止Unix进程
$ ps aux查看系统所有进程
$ ps aux | grep 使用grep过滤输出
$ kill -15 终止进程
$ pkill -15 -f spring关闭所有名为"spring"的进程
- linux上进程有5种状态:
运行(正在运行或在运行队列中等待)
中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
list set map
list --其中的值允许重复,因为其为有序的数据结构 ,允许空值
set --其中的值不允许重复,无序的数据结构
map--成对的数据结构,健值必须具有唯一性(键不能同,否则值替换)
java 常用类
-
1.String类
-
2.基本数据类型包装类
基本数据类型 包装类型
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
boolean java.lang.Boolean
char java.lang.Character -
3.String,int,Integer三者相互转换
//1.int-->Integer
Integer i1 = Integer.valueOf(10);
//2.Integer-->int
int i2=i1.intValue();
//3.String-->Integer
Integer i3=Integer.valueOf("10");
//4.Integer-->String
String s1=i3.toString();
//5.String-->int
int i4=Integer.parseInt(s1);
//6.int-->String
String s2=10+"";
//jdk5.0之后
Integer i5=10;//自动装箱
int i6=i5;//自动拆箱
- 4.日期类
- 5.枚举
- 6.Random