JAVABASIC

1.类的成员变量都是存放在堆中 类中方法里面的局部变量在栈
2.数组存放在是内存地址在这里插入代码片
3.谷歌的Ctrl+P 打印PDF在这里插入代码片在这里插入代码片`
4.this.引用成员变量,如果参数变量和成员变量同名的话必须加this,加this.代表成员变量,
不加this代表参数变量,如果有形参的前提下
5.基本类型直接保存值,引用类型保存对象的地址
6.this 引用当前对象的地址
7.super() 默认调用父类无参构造 super. 调用父类其他构造方法 放首行
8.StringBuilder 初始16 满后翻倍加2 为什么+2 防止初始是0
9.heap 是堆内存
.equal 左边不能为null 不然会引发空指针
10.StringBuilder线程不安全 效率高 StringBuffer 线程安全 效率低
多线程线程安全 用StringBuffer
11.(从小到大)隐式转换和强制转换 byte,short,char–>int -->long -->float -->double
short a=2; a=a+1;(报错) a+=1;相当于(a=(short(a+1)));(不报错)
12.parse 字符串解析成int Integer.parseInt(“123”)
13.Javabean 是可复用类 用于封装属性
14.String 变Boolean 使用parseBoonlean
15.(引用的实例)instanceof(真实的类型对象)
16. ^在二进制不同是1 相同是0 ,多用于加密操作
17.>>表示带符号右移位 最左边是符号位 左边是1移位还是1 1表示负数 左边是0移位还是0 0表示正数
18.>>>不带符号右移位 不管符号位是1还有0 都是0 负数都会变成正数
没有<<< 这个符号位 <<带符号左移
19.>>1 相当于除2; <<1 相当于乘2
20.LinkList(双向链表)方法 两头增删效率高
队列操作 Queue 先进先出 后增前删
offer(链表末尾增加)=addlast()
peek(链表末尾得到下标)=getlast()
poll(链表头部删除)=removefirst();为空时返回null
栈操作 Stack (子弹壳) 先进后出
push(头部位置增加)=addfirst()
pop(头部位置删除)=removefirst();为空时抛空指针异常
21.class文件的前四个字节 称为魔数 是JVM能否区分文件的唯一作用
22.final <1>值不可变
修饰基本类型值不变,修饰引用类型只是引用不可变,但是引用所指向的地址的内容可以改变。
final Point a=new Point(3,4);
a.x=30;a.y=40; //可变 只是a本身不可变
<2>方法不能重写 <3>类不能继承
23.static 静态变量在方法区中类的.class文件里只有一个内存地址 类中共享的数据
24.接口与接口之间继承 interface A extends X,Y,Z(其中X,Y,Z都是接口)
25.创建对象10步:
(1)父类静态变量分配内存并初始化 (2)子类静态变量分配内存并初始化
(3)父类静态变量赋值和静态块初始化(看先后顺序执行)
(4)子类静态变量赋值和静态块初始化(看先后顺序执行)
(5)父类实例变量分配内存并初始化 (6)子类实例变量分配内存并初始化
(7)父类实例变量赋值再执行父类构造方法
(8)子类实例变量赋值再执行子类构造方法
26.哈希运算
哈希值是一个内存地址 初始数组长度16 阀值12
HashMap 是一个内部存放Entry的数组,数组里的每一项都能形成链表
(1)先运算key的hashcode求出哈希值
(2)用哈希值和数组长度得出下标i
(3)Entry数组封装键值对,并把封装好的Entry数组放在i位置
(4)如果空位置直接放入
(5)如果hashcode相等代表这个位置有数据,再用equal比较key相等的话会覆盖,不相等的话会形成链表
(6)负载率和加载因子0.75会新建容量翻倍的数组 并重新哈希运算
(7)JDK 1.8之后 链表长度到8会变成红黑树,链表数据减少变成6,重新变成链表
27.计算机是主体 磁盘是外部存储器 内存数据到磁盘是输出流,磁盘数据到内存是输入流
28.
(1)isfile 是否是文件
(2)isDirector是否是文件夹
(3)mkdirs逐层创建多层文件夹
(4)delete删除文件或或者空文件夹
29.InputStream --字节输入流父接口
OutputStream --字节输出流父接口
FileInputStream --文件输入流(只能针对文件)
FileOutputStream – 文件输出流(只能针对文件)
ObjectInputStream – 反序列化 (恢复文件)(readobject)
ObjectOutputStream – 序列化 (存入磁盘)(writeobject)
一个java需要被序列化 implements Serializable
Reader --字符输入流抽象父类
Writer --字符输出流抽象父类
(字节编码转换流)
InputStreamReader --将其他类型编码读取成Java的Unicode编码
OutputStreamWriter --将Java的Unicode编码转换成其他类型编码
BufferedReader 按行读取
PrintWriter 按行打印
30.字符流与字节流之间的转换
String a=‘111’;
byte[] s=a.getBytes(不填写代表系统默写编码或者自己添加"UTF-8")
String a=new String(s,不添加编码代表系统默认编码或者自己添加"UTF-8")
31.字符流用缓冲区,字节流没有缓冲区,所以使用字符流不关闭流的话,需要使用Writer中的flush强制输出.
将字符流转换成字节流,String.getBytes(String charsetname) 转换成 byte[]
将字节流转换成字符流,byte[] 转换成 String.getBytes(String charsetname)
*字节流和字符流都有挨个字节或字符操作,和使用数组作为缓冲区批量操作;
字节流 byte[]b=new byte[1024] 一个字节 字符流 char[]c=new char[1024] 两个字节
32. 有系统路径的需要File.separator表示字符串里面的分隔符 代替"/"
throw new UnsupportedOperationException();解释为什么为空(不能作用于构造方法中)
33. Properties properties = System.getProperties();
for (String key: properties.stringPropertyNames()) {
System.out.println(key+"—"+System.getProperty(key));
}
}
查看系统变量
System.out.println(“Java运行时环境版本:/n” + System.getProperty(“java.version”));
System.out.println(“Java 运行时环境供应商:/n” + System.getProperty(“java.vendor”));
System.out.println(“Java 供应商的URL:/n” + System.getProperty(“java.vendor.url”));
System.out.println(“Java安装目录:/n” + System.getProperty(“java.home”));
System.out.println(“Java 虚拟机规范版本:/n” + System.getProperty(“java.vm.specification.version”));
System.out.println(“Java 类格式版本号:/n” + System.getProperty(“java.class.version”));
System.out.println(“Java类路径:/n” + System.getProperty(“java.class.path”));
System.out.println(“加载库时搜索的路径列表:/n” + System.getProperty(“java.library.path”));
System.out.println(“默认的临时文件路径:/n” + System.getProperty(“java.io.tmpdir”));
System.out.println(“要使用的 JIT 编译器的名称:/n” + System.getProperty(“java.compiler”));
System.out.println(“一个或多个扩展目录的路径:/n” + System.getProperty(“java.ext.dirs”));
System.out.println(“操作系统的名称:/n” + System.getProperty(“os.name”));
System.out.println(“操作系统的架构:/n” + System.getProperty(“os.arch”));
System.out.println(“操作系统的版本:/n” + System.getProperty(“os.version”));
System.out.println(“文件分隔符(在 UNIX 系统中是“/”):/n” + System.getProperty(“file.separator”));
System.out.println(“路径分隔符(在 UNIX 系统中是“:”):/n” + System.getProperty(“path.separator”));
System.out.println(“行分隔符(在 UNIX 系统中是“/n”):/n” + System.getProperty(“line.separator”));
System.out.println(“用户的账户名称:/n” + System.getProperty(“user.name”));
System.out.println(“用户的主目录:/n” + System.getProperty(“user.home”));
System.out.println(“用户的当前工作目录:/n” + System.getProperty(“user.dir”));
34.fileFilter 插在 filelist上充当文件过滤器 过滤器接收accerpt
35.数组的工具类Arrays 集合类的工具类Collections Arrays.sort
–集合工具类使用sort(list,比较器) Comparator抽象接口 使用内部类继承Comparator
Collections.sort(list, new Comparator() {
@Override
public int compare(String o1, String o2) {
return 0;
}
});

36.异常分为检查型异常(比如IO异常可以人为捕获不至于终止程序)和非检查型异常也叫运行时异常(这种异常一般JVM会自己处理,比如空指针,数组超出下标),他们统称为Excetion,另一种叫系统异常Error(系统级问题,无法修复),Excetion和Error统称为Throwable
37.BufferedReader 表示按行读取readline() PrintWriter 表示按行打印println()
日期格式parse解析时 需要抛出非检查型异常包装老异常 不然报错
38.静态方法不能调用非静态成员属性 非静态方法能调用静态成员属性
39.操作系统包含进程,进程包含线程
启动线程的两个方法 Thread Runnable
继承Thread类,new一个实例 实例.start()
继承Runnable new一个实例 在new一个Thread 把实例放在Thread里面 在用Thread的实例.start()
–线程的状态 新建 - 可执行(start) - 执行(run)-或者阻塞(sleep)返回可执行状态- 执行之后会死亡
–线程的方法
(1)Thread.currentThread() 获得正在执行线程的时间
(2)Thread.sleep() 让正在执行线程,暂停指定的时间(毫秒值)
(3)getName() setName() 线程名
(4)start() 启动线程
(5)interrupt() 打断线程的暂停状态 (如果强制打断暂停时间会抛异常) 谁.interrupt()谁被强制暂停
(6)join() 当前线程暂停 等待被调用的线程结束 在执行 谁.join() 谁先走
(7)setDeamon(true)后台线程,守护线程,虚拟机不会等待后台线程结束,只会等待所有前台线程结束,比如
gc垃圾回收
(8)Thread.yield() 主动放弃CPU时间片,从执行状态变为可执行状态,
一,让出CPU时间片后,可能又立即获取CPU时间片,进而继续执行方法.
二,让出CPU时间片后,等待一段时间后获取CPU时间片,进而继续执行方法.
40.synchronized关键字
synchronized也称"同步锁"
表示:(一个抢到锁执行另外一个必须等待)
(1)必须要先抢锁(同一个实例和同一把锁),不然无法同步
(2)用于线程同步,多个线程共享一个数据
synchronized的作用范围:
synchronized(对象){对应的代码块} 抢指定对象的锁
例-- public void test(){
synchronized (this) {
// TODO ()指定对象
}
}
synchronized void f(){} 抢对象的实例的锁
例-- public synchronized void test(){
// TODO 谁调用这个方法谁是当前对象的实例
}
static synchronized void f(){} 抢当前类的锁

System.exit(0) 退出虚拟机
41.生产者与消费者模式 用于(解耦)
解决:线程之间传递数据的方式
Producer(生产者) -> Stack <- Consumer(消费者)
一般锁住的都是对象,很少有一个类和一个方法。
42.通知和等待
object的方法 任何对象都有
wait() 等待
notify() 通知 有局限性可能通知的是同一个线程,其他线程不会执行
notifyAll() 通知所有
使用条件
(1)调用方法,必须在synchronized代码内调用
(2)等待和通知的对象,必须是加锁的对象
(3)wait()外面,总应该是一个循环条件判断
–生产者
//通知
stack.notifyAll();

–消费者
while (true){
synchronized (stack){
try {
//等待
stack.wait();
} catch (InterruptedException e) {
// 防止打断异常
e.printStackTrace();
}
}
}
–Alt+Shift+M 抽取方法
***43.wait和sleep的区别 (wait 释放了锁)(sleep 没有释放锁)
sleep()方法是1.Thread类的静态方法,不涉及到线程间同步概念
仅仅为了让一个线程自身获得一段沉睡时间,并可以在任何地方使用。
wait()方法是1.object类的方法,解决的问题是线程间的同步
该过程包含了同步锁的获取和释放,调用wait方法将会将调用者的线程挂起,
直到其他线程调用同一个对象的notify()方法才会重新激活调用者。
44. 同步监视器
必须在synchronized代码内,必须是加锁的对象,会关联一个同步监视器
45.网络
服务端 ServerSocket(port) accept()阻塞并建立连接 来获取Socket 对象 放双向流
客户端 Socket(ip,port) 取双向流
– 阻塞操作
(1)ss.accept() 暂停,等待客户端发起连接
(2)in.read() 对方不发送数据,暂停,死等数据
服务端 先读取在写入 客户端 先写入在读取

建议忘记可以多写 聊天室 本人对加锁的概念不是很理解所以聊天室深入到锁的就略过吧

46.面试题~ Arrayslist和Linklist的区别
对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。需要遍历所有数据
对于新增和删除add和remove,LinedList比较占优势,因为ArrayList要移动数据。需要移动所有数据

47.反射
加载方法区的类对象 获取类对象
(1)Class.forName(“包名.类名”)
(2)类名.class
(3)实例.getClass()
getPackage().getName() 包名
getName() 全类名
getSimpleName() 类名

getConstructors() 可见的所有构造方法
getDeclaredConstructors() 获得本类所有构造方法
getConstructor(参数类型列表:int.class,String.class);

getFields() 所有变量名
getDeclaredFields() 所有变量名不含继承
getField(变量名)

getMothods() 所有方法名
getDeclaredMothods() 本类方法不含继承
getMothod(方法名,参数类型列表:int.class);
–反射使用
Class<?> c = Class.forName(“包名.类名”);//获取“类对象”
Object obj = c.newInstance();//新建实例执行无参构造
Method m = c.getMethod(a[1]);//获取方法
m.invoke(obj);//反射调用该方法``

48.@注解:

  • 元注解:对注解的注解
    @Target 设置注解目标:类、方法、成员变量、参数变量…
    @Retention 保留范围:源码、字节码、运行期内存
  • 源码:编译成字节码时被丢弃
  • 字节码:类被加载到内存时丢弃
  • 运行期内存:在内存中保留
    @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD,
    ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Test(){
    //没有默认值 必须赋值
    int id() default 0;
    String title() default “”;
    }

49网络爬虫

//获取全部页面
Jsoup.connect(网址).execute().body();
//获取根节点
Document d = Jsoup.connect(网址) .get();
//通过CSS选择元素
Elements s = d.select(“div”);
//变为本文形式
String t = s.text();

json格式就是key value 的格式

©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

weixin_45380366

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值