知识问答

1.List接口有哪些实现类?
1.1:
  ArrayList:作为List接口的主要实现类;线程不安全,效率高;底层使用Object[ ] elementData 存储。
  LinkedList:对于频繁的插入、删除操作,使用此效率比ArrayList高;因为其底层使用双向链表存储。
  Vector:作为List接口的古老实现类;线程安全的,效率低;底层使用Object[ ] elementData 存储。
 1.2:ArrayList、LinkedList、Vector三者的相同点:
  以上三个类都实现了List接口,并且存储有序的,可重复的数据。

2.ArrayList类有几个构造函数?
ArrayList类有以下三个构造函数:
ArrayList():创建一个空的ArrayList对象。
ArrayList(Collection<? extends E> c):创建一个包含指定集合中的元素的ArrayList对象。
ArrayList(int initialCapacity):创建一个具有指定初始容量的ArrayList对象。

3.ArrayList的本质是?
ArrayList是一种实现了List接口的动态数组,它可以自动扩容和缩容。
它的本质是一个可变大小的数组,可以存储任意类型的对象。
使用ArrayList可以方便地插入、删除、获取和修改元素,同时也支持对元素进行遍历和搜索。

4.ArrayList每次扩容多少?从哪个方法看出来的
1.5倍,
ArrayList扩容发生在add()方法调用的时候, 调用ensureCapacityInternal()来扩容的,通过方法calculateCapacity(elementData, minCapacity)获取需要扩容的长度。

5.>>符号的作用是什么
该运算符为双目运算符,结合方向为从左到右,作用是把一个整型数的所有位向右移动指定的位数,移动到右边界之外的多余二进制位会被丢弃,并从左边界移入一个二进制位,若原数的最高位为1,则移入的二进制位为1,否则为0。” 

6.ArrayList的常用的公有方法是
添加元素到 ArrayList 可以使用 add() 方法
访问 ArrayList 中的元素可以使用 get() 方法
修改 ArrayList 中的元素可以使用 set() 方法
删除 ArrayList 中的元素可以使用 remove() 方法:
ArrayList 中的元素数量可以使用 size() 方法,返回值int类型
迭代可以使用普通fro循环,for循环,foreach(Lambda 表达式)
删除全部元素:方法:clear()
复制一份 arraylist:方法:clone()
判断 arraylist 是否为空方法:isEmpty()

7.序列化接口标识
java中的Serializable接口就是标识接口, 标识接口就是告诉jvm或程序,这个是什么类型。当是这种类型时我们可以允许这个类做什么,或对这个类做什么。 实现Serializable接口的类告诉jvm此类可以被序列化。
1、序列化是干什么的?
 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化  
(a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
(b)当你想用套接字在网络上传送对象的时候;
(c)当你想通过RMI传输对象的时候;

8.对象输入流和输出流的类名是
对象的输出流: ObjectOutputStream 对象的输入流: ObjectInputStream”

9.使用对象输入流中的什么方法可以读取磁盘对象
1.创建一个对象输入流ObjectInputStream,他可以包装一个其他类型的输入流
2.通过对象输入流的readObject方法读取对象,该方法返回一个Object对象

10.如何保证一个类中只实例一次Scanner对象
1. 在输入数据时使用空格来分隔多组输入数据,输入完所有数据再回车
2. 在要输入字符串数据之前先把回车符处理掉
3. 使用单独的Scanner对象接收数据(浪费空间)
4. 将所有的数据都先按照字符串获取,之后再转成相应类型

11.构造函数的作用是
构造函数的作用是初始化对象,即在创建对象时被系统调用(与普通方法不同,程序不能显示调用构造函数)。构造函数还能够被重载,即可以传入参数,当程序中包含有带参的构造函数时,系统将不会再提供的无参构造函数。

12.什么是网络编程的三要素
1.ip:主机的唯一标识    
2.端口:主机所运行的程序的唯一标识
65536 0-1023知名端口
1024-49151 用户程序进程
49152-65535 私有动态端口
3.协议
tcp/ip

13.简介tcp协议和简介upd协议
TCP/IP协议族为运输层指明了两个协议:TCP和UDP,它们都是作为应同程序和网络操作的中介物。
TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP是面向连接的、可靠的流协议。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
两者的区别:
1、TCP是面向连接的,UDP是面向无连接的;
2、UDP程序结构较简单;
3、TCP是面向字节流的,UDP是基于数据报的;
4、TCP保证数据正确性,UDP可能丢包;
5、TCP保证数据顺序,UDP不保证。  

14.简介端口
“端口”,是英文port一词的意译,可以认为是设备与外界通讯交流的出口。
用于传输控制信息,网页浏览,用于代理服务,远程登录,发送邮件,用于域名解析.

15.创建TCP服务器的类名是
ServerSocket

16.如果程序端口被其他程序占用,无法启动,java的异常名称是
 java.net.BindException: Address already in use

17.tcp网络信息通讯落实在什么技术
丢失重传和重复确认技术

18.tcp和udp谁更加安全,为什么
UDP比TCP稍安全
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……

19.创建线程对象的三种方法
第一种,通过继承Thread类创建线程类
1、定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体;
2、创建该类的实例对象,即创建了线程对象;
3、调用线程对象的start()方法来启动线程;
第二种,通过实现Runnable接口创建线程类
1、定义一个类实现Runnable接口;
2、创建该类的实例对象obj;
3、将obj作为构造器参数传入Thread类实例对象,这个对象才是真正的线程对象;
4、调用线程对象的start()方法启动该线程;
第三种,通过Callable和Future接口创建线程
1、创建Callable接口实现类,并实现call()方法,该方法将作为线程执行体,且该方法有返回值,再创建Callable实现类的实例;
2、使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值;
3、使用FutureTask对象作为Thread对象的target创建并启动新线程;
4、调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

20.开启线程的方法名
继承Thread类,重写run方法,调用 start 方法启动
实现Runnable接口,重写run方法,调用 start 方法启动
匿名内部类 创建Thread 子类对象
匿名内部类 创建Runnable子类对象
使用 lambda 表达式 创建Runnable 子类对象
创建线程池:
1. 使用 Executors.newFixThreadPool ( )  创建固定线程数的线程池
2.返回值的类型为 ExecutorService
3. 通过ExecutorsSercvice. submit 可注册一个任务到线程池中
使用Callable

21.为什么要使用多线程
1.使用线程可以把占据时间长的程序中的任务放到后台去处理
2.用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度
3.程序的运行效率可能会提高
4.在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.

22.为什么要使用反射
java要用反射的原因是:
1.提高程序的灵活性;
2.屏蔽掉实现的细节,让使用者更加方便好用。java反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。

23.获取Class对象的三种方式
方式一:利用简单方法实现  Object类 中的getClass()方法,创建Person类,必须要明确具体的类,并且要创建对象,麻烦。(因为有更简单的办法,直接输入全类名就可以完成全部创建,其他步骤可以封装)
方式二:通过对象静态属性 .class来获取对应的Class对象相对简单,但是还是需要先明确类中的静态成员。不够拓展。
方式三:通过反射,只要通过给定类的字符串名称就可以获取该类,更为拓展,forName

24.线程池的作用是什么
1,降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗
2,提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行
3,提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控

25.lambda表达式应用的前提
(1)使用Lambda必须有接口,且接口只有一个抽象方法(即函数式接口)。
(2)Lambda必须可以“上下文推断”(就是依据语境推断出参数类型,这也是Lambda的一个优点,使得参数类型得以省略,更加简洁)

26.Set集合有什么特点
1.无序性:Set集合中的元素没有先后顺序,每个元素在集合中的位置都是随机的。
2.唯一性:Set集合中的元素不能重复,也就是说它们是唯一的。
3.可变性:Set集合是可变的,可以随时添加或删除..

27.Map映射有什么特点
键具有唯一性,但是值可以重复。
键唯一性: 在一个映射中,每个键只能对应一个值,确保了数据的唯一性。
灵活的键类型: 键可以是任意引用类型,值也可以是任意数据类型。

28.简述迭代
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。

29.简述多线程,同步锁
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” [1] 。
一、同步锁的机制
同步锁是通过对共享资源的访问进行限制,以达到线程安全的目的。在多线程环境下,多个线程可能会同时访问共享资源,这时就需要同步锁来保证只有一个线程能够访问共享资源,其他线程则需要等待。同步锁的实现通常基于操作系统提供的原语,如互斥量(mutex)、信号量(semaphore)等。
同步锁的基本原理如下:
线程在访问共享资源之前,需要先获得同步锁的控制权;
如果同步锁已经被其他线程占用,则当前线程需要等待;
当前线程获得同步锁的控制权后,可以安全地访问共享资源;
当前线程访问完共享资源后,需要释放同步锁的控制权,以便其他线程可以访问共享资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值