牛客刷题打卡
Posted LL.LEBRON
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客刷题打卡相关的知识,希望对你有一定的参考价值。
文章目录
牛客刷题打卡
1-9
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
网络拓扑结构是指通过网中结点(路由器、主机等)与通信线路(网线)之间的几何关系(如总线形、环形)表示的网络结构,主要是指通信子网的拓扑结构
互联网控制报文协议—网络层协议。
ICMP主要的功能包括∶确认IP包是否成功送达目标地址、报告发送过程中IP包被废弃的原因和改善网络设置等。
ICMP报文的种类有两种:ICMP差错报告报文和ICMP询问报文
D:同一进程中的不同线程共享地址空间,所以一个线程挂掉可能会导致整个进程挂掉
1-10
TTL
是 time to live
最大生存时间。数据包每经过一个路由,TTL就减1,TTL减完后这个包会被丢弃
-
预防死锁
- 破坏互斥条件
- 破坏请求和保持条件
- 破坏不可剥夺条件
- 破坏环路等待条件
-
避免死锁
银行家算法
-
检测死锁
资源分配图简化法
-
解除死锁
1.资源剥夺法
2.撤销进程法
3.进程回退法
按照慢开始算法,发送窗口=min拥塞窗口,接收窗口,初始的拥塞窗口为最大报文段长度1KB。每经过一个RTT,拥塞窗口翻倍,因此需至少经过5个RTT,发送窗口才能达到32KB,所以选A。这里假定乙能及时处理接收到的数据,空闲的接收缓存≥32KB。
1-11
CPU封装技术的发展方向以节约成本为主。
衡量CPU的性能指标:
- 工作频率:主频(时钟频率,CPU运算和处理数据的速度),外频(主板的运行速度),倍频系数
- 缓存:内部Cache容量,为了平衡CPU和内存的速度。分为三级缓存
- 字长:CPU的位和字长。同一时间能一次处理的二进制数的位数叫字长
- 指令系统:CPU依靠指令来计算和控制系统
常用的磁盘调度算法有以下四种:
- 先来先服务算法(FCFS),根据进程请求访问磁盘的先后顺序进行调度,优点是公平。
- 最短寻道时间优先算法(SSTF),选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短,这种会产生“饥饿”现象,即距离当前磁道较远的磁道号长期得不到服务。
- 扫描算法(SCAN),在磁头当前移动方向上选择与磁头所在磁道最近的请求作为下一次服务的对象,该算法对最近扫描过的区域不公平。
- 循环扫描算法(CSCAN),在扫描基础上规定磁头单向来提供服务,回返时直接快速移动至起始端而不服务任何请求。
发送数据帧时,交换机从1号端口接收此数据帧,因目的MAC地址不在转发表中,所以交换机采用洪泛法向其它端口(2、3)转发此帧,同时将源MAC地址登记在转发表中;发送确认帧时,交换机从3号端口接收此帧,查找转发表,从相应1号端口转发此帧。
操作系统五种功能:进程管理,存储管理,文件管理,作业管理,设备管理
构造二叉排序树遵照的原则:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
处理器每执行完一条指令后,硬件的中断装置立即检查有无中断事件发生,若有中断事件发生,则暂停现行进程的执行,而让操作系统的中断处理程序占用处理器,这一过程称“中断响应”。
1-12
外部类/接口的访问控制符只有public和default,但是内部类/接口,类变量,成员变量,方法的访问控制符有四个是public、protected、default、private。注意一下,局部变量不能被访问修饰符修饰的。
- 构造方法每次都是构造出新的对象,不存在多个线程同时读写同一对象中的属性的问题,所以不需要同步 。
- 如果父类中的某个方法使用了 synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显示的在子类的这个方法中加上 synchronized关键字才可。当然,也可以在子类中调用父类中相应的方法,这样虽然子类中的方法并不是同步的,但子类调用了父类中的同步方法,也就相当子类方法也同步了
count=count++就是先把局部变量表中count的值0放入操作数栈中,然后直接对局部变量表中的count加1,然后再把操作数栈中的0出栈赋值给局部变量表中的count,最终局部变量表中的count值仍为0
Servlet过滤器的配置包括两部分:
- 第一部分是过滤器在Web应用中的定义,由
<filter>
元素表示,包括<filter-name>
和<filter-class>
两个必需的子元素 - 第二部分是过滤器映射的定义,由
<filter-mapping>
元素表示,可以将一个过滤器映射到一个或者多个Servlet或JSP文件,也可以采用url-pattern将过滤器映射到任意特征的URL。
二维数组定义,一维长度必须定义,二维可以后续定义
**USES-A:**依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。
**关联关系:**A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。
HAS-A:聚合关系,拥有关系,是关联关系的一种特例,是整体和部分的关系。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。
**IS-A:**表示继承。父类与子类,这个就不解释了。
要注意:还有一种关系:组合关系也是关联关系的一种特例,它体现一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分的关系,但这种整体和部分是不可分割的。
1-14
桥接模式:
定义 :将抽象部分与它的实现部分分离,使它们都可以独立地变化。
意图 :将抽象与实现解耦。
桥接模式所涉及的角色
- Abstraction :定义抽象接口,拥有一个Implementor类型的对象引用
- RefinedAbstraction :扩展Abstraction中的接口定义
- Implementor :是具体实现的接口,Implementor和RefinedAbstraction接口并不一定完全一致,实际上这两个接口可以完全不一样Implementor提供具体操作方法,而Abstraction提供更高层次的调用
- ConcreteImplementor :实现Implementor接口,给出具体实现
Jdk中的桥接模式:JDBC
JDBC连接 数据库 的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不动,原因就是JDBC提供了统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了
不管怎样线程对a的操作就是+1后-2
1.线程1执行完再线程2执行,1-2+1-2=-2
2.线程1和2同时+1,再-2不同时,1-2-2=-3
3.线程1和2不同时+1,同时-2,1+1-2=0
4.线程1和2既同时+1又同时-2,1-2=-1
没有结果为1的情况
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
- 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
- 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
JAVA常用的节点流:
- 文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
- 字符串 StringReader StringWriter 对字符串进行处理的节点流。
- 数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
- 管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。
常用处理流(关闭处理流使用关闭里面的节点流)
-
缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
-
转换流:InputStreamReader OutputStreamReader 实现字节流和字符流之间的转换。
-
数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来.
流的关闭顺序
- 一般情况下是:先打开的后关闭,后打开的先关闭
- 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。例如,处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b
- 可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
- 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值
- 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值
- 左、右子树也分别为二叉排序树
注意:要求所有结点
- 在每一个链表中取出第一个值,然后把它们放在一个大小为N的数组里,然后把这个数组当成heap建成小(大)根堆。此步骤的时间复杂度为O(N)
- 取出堆中的最小值(也是数组的第一个值), 然后把该最小值所处的链表的下一个值放在数组的第一个位置。如果链表中有一个已经为空(元素已经都被取出),则改变heap的大小。此步骤的时间复杂度为O(lg N)
- 不断的重复步骤二,直到所有的链表都为空。
建堆只建一次,复杂度为O(N);调整堆MN-1次,复杂度为(MN-1)O(lg N)。所以为O(MNlg N)
grant usage on secretData.* to 'nkw'@'%';
授权的用户对secretData下的所有表有登录权限grant usage on *.* to 'nkw'@'%';
授权的用户对该机器下的下的所有数据库下的所有表有登录权限;- with表示该用户有对往其他用户向下授权的权限(这里向下授予的权限仅是用户自己有的权限);
- 题目说的是新建用户对机器只有登录权限,机器可能有多个数据库D符合,B授予的权限小了;
1-15
注意这里"ISO8859-1"是一个普通字符串,不要被迷惑了。
String.getBytes(“ISO8859-1”)表示获取这个字符串的byte数组,
然后new String(String.getBytes(“ISO8859-1”),GB2312)是上面的字符数组按照GB2312编码成新的字符串
简单的来说 java的堆内存分为两块:
-
permantspace(持久带)
持久带中主要存放用于存放静态类型数据,如 Java Class, Method 等, 与垃圾收集器要收集的Java对象关系不大。
持久代溢出原因动态加载了大量Java类而导致溢出
-
heap space
而heapspace分为年轻带和年老带 。
年轻代的垃圾回收叫
Young GC
, 年老代的垃圾回收叫Full GC
。在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象
年老代溢出原因有 循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存,既A B D选项
String test="javaandpython";
String str1="java";
String str2="and";
String str3="python";
System. out. println(test=="java"+"and"+"python"): //true
System. out. println(test ==str1 + str2 + str3);//false
对于上面这段代码,结果是true false
这是因为字符串字面量拼接操作是在Java编译器编译期间就执行了,也就是说编译器编译时,直接把"java"、“and"和"python"这三个字面量进行”+“操作得到一个"javaandpython” 常量,并且直接将这个常量放入字符串池中,这样做实际上是一种优化,将3个字面量合成一个,避免了创建多余的字符串对象(只有一个对象"javaandpython",在字符串常量池中)。而字符串引用的"+"运算是在Java运行期间执行的,即str1 + str2 + str3在程序执行期间才会进行计算,它会在堆内存中重新创建一个拼接后的字符串对象。且在字符串常量池中也会有str1,str2与str3,这里创建多少个新的对象与原来字符串常量池中有没有str1\\str2\\str3有关,如果之前存在就不会创建新的对象。
总结来说就是:
- 字面量"+"拼接是在编译期间进行的,拼接后的字符串存放在字符串池中
- 而字符串引用的"+"拼接运算实在运行时进行的,新创建的字符串存放在堆中
那么再来看这题,很明显只在编译期间在字符串常量池中创建了"welcometo360"一个字符串
1、外部类前可以修饰:public、default、abstract、final
2、内部类前可以修饰:public、protected、default、private、abstract、final、static
3、局部内部类前可以修饰:abstract、final
其中:访问修饰符(public、protected、default、private),其他都是非访问修饰符
final的方法可以被重载,不能被重写。
1-16
整数类型 默认为 int
带小数的默认为 double
PC寄存器就是程序计数器
Unicode是由两个字节组成的,而InputStreamReader
是将字节流转换成字符流供我们使用。同时InputStreamReader
也可以指定字符集的编码。
在接口中,属性都是默认public static final
修饰的,所以:
A(错误):不能用private修饰;
B(正确):在接口中,属性默认public static final,这三个关键字可以省略;
C(错误):没写属性的类型;
D(错误):final修饰的属性必须赋值;
- 如果在常量池中已经存在“xyz”,那么不会继续创建,只在堆中创建一个new String(“xyz”)的对象。
- 如果常量池中没有,则会创建两个对象,一个在堆中,一个在常量池中
1-17
选B。考察的是如何破坏形成死锁的条件而进程继续运行。
产生死锁的条件:
- 互斥条件
- 请求和保持条件
- 不可抢占条件
- 循环等待条件
(2 - 1) + (3 - 1) + (4 - 1) = 6,当有6个资源时,各进程均缺少1个资源;故只需再多分配一个资源即可保证任一时刻必定有进程能拿到所需的全部资源,从而避免死锁;故答案为7。
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的
n个点的单向连通图有n-1条边,考虑上三角或者下三角,就是说邻接上/下三角矩阵中有n-1个值不为0,又因为邻接矩阵在描述无向图时是对称的,所以有n^2-2(n-1)
1-18
- 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。 - 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
- 子类通过super关键字调用父类的一个构造方法;
- 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
- 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;
- 构造方法不是类的成员方法;
- 构造方法不能被继承。
CountDownLatch
允许一个或多个线程等待其他线程完成操作。
CyclicBarrier
让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
D:final修饰变量,变量的引用(也就是指向的地址)不可变,但是引用的内容可以变(地址中的内容可变)。
C:finalize方法,这个选项错就错在,这个方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。第二次进入回收队列的时候,不会再执行其finalize方法,而是直接被二次标记,在下一次GC的时候被GC。
1-19
- 插入点位于x的左孩子的左子树中。 左左LL 右旋。
- 插入点位于x的左孩子的右子树中。 左右LR 较低的先左旋,转换为LL问题,再右旋。
- 插入点位于x的右孩子的左子树中。 右左RL 较低的先右旋,转化为RR问题。再左旋。
- 插入点位于x的右孩子的右子树中。 右右RR 左旋
synchronized不是修饰变量的。它修饰方法或代码块或对象
mysql 不支持full join
A:如果对这棵搜索二叉树做中序遍历,待删除结点的前驱是它左子树最右边的结点,它的后继是它右子树最左边的结点,所以也可以用右子树最小结点来替代
B:对于搜索树来说,只要知道前序遍历就能还原了,第一个是根结点,之后的连续K个小于根节点的为左子树,后面的都是右子树,然后递归
C 正确, 中序遍历就可以了
1-20
example调用run(),而不是启动线程的start(),所以该程序会依次执行,先打印run,再打印main,所以选A
java的String底层是char数组,它的length()返回数组大小,而unicode中一个汉字是可以用一个char表示的
存储过程的优点:
- 执行速度快
- 允许组件式编程
- 减少网络流量
- 提高系统安全性
存储过程缺点:
- 移植性差
- 难以调试、维护。
- 服务器不能负载均衡。
1.sleep会使当前线程睡眠指定时间,不释放锁
2.yield会使当前线程重回到可执行状态,等待cpu的调度,不释放锁
3.wait会使当前线程回到线程池中等待,释放锁,当被其他线程使用notify,notifyAll唤醒时进入可执行状态
4.当前线程调用 某线程.join()时会使当前线程等待某线程执行完毕再结束,底层调用了wait,释放锁
- is-a,理解为是一个,代表继承关系。 如果A is-a B,那么B就是A的父类。
- like-a,理解为像一个,代表组合关系。 如果A like a B,那么B就是A的接口。
- has-a,理解为有一个,代表从属关系。 如果A has a B,那么B就是A的组成部分。
1-21
1-22
初始化过程:
1.初始化父类中的静态成员变量和静态代码块 ;
2.初始化子类中的静态成员变量和静态代码块 ;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;
(1)初始化父类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(2)再执行父类的构造方法;输出X
(3)初始化子类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(4)再执行子类的构造方法;输出Z
所以输出YXYZ
错误答案C:没达到行转列的目的
select sno,
case when class='english' then score else 0 end ,
case when class='math' then score else 0 end
from sc
where class in('english','math')
结果:一个学生最终会出现两条记录(英语和数学),每条记录都是满足当前class条件的那门课程成绩正常,其余课程成绩为0
张三 80 0
张三 0 79
王五 60 0
王五 0 88
修改为:
select sno,
sum(case when class='english' then score else 0 end ) as english,
sum(case when class='math' then score else 0 end) as math
from sc
where class in('english','math')
group by sno;
正确答案D:
select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno
如果科目为English为真,English成绩+score,否则+0!!!
结果:
张三 80 79
王五 60 88
1-23
intValue()是把Integer对象类型变成int的基础数据类型;
parseInt()是把String 变成int的基础数据类型;
Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)
本题:parseInt得到的是基础数据类型int,valueof得到的是装箱数据类型Integer,然后再通过valueInt转换成int,所以选择D
1-24
A,接口中方法的默认修饰符时public abstract,抽象方法可是没有方法体的,没有大括号
B,JDK8中,接口中的方法可以被default和static修饰,但是!!!被修饰的方法必须有方法体。
C,注意一下,接口是可以多继承的。整个没毛病,和A选项一样,抽象方法不能有方法体
Arraylist默认数组大小是10
,扩容后的大小是扩容前的1.5
倍,最大值小于Integer 的最大值减8,如果新创建的集合有带初始值,默认就是传入的大小,也就不会扩容
File类能操作文件本身,但不能对文件内容进行修改
1-25
后半句的表述不正确,例如双向图的邻接矩阵就是对称的。
https://www.nowcoder.com/profile/664424672/test/51551463/160031#summary
三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
4.若两个操作数都是直接量数字,则返回值类型为范围较大者
&&是逻辑与 即判断&&两侧的表达式是否都为真,都为真则此&&表达式值为真;& 是按位与即将&两侧的数用二进制展开,每一位都求与运算,最后得到的二进制数即为结果;逻辑与结果只讲真和假,而按位与得出的却是实实在在的一个数
&不短路,&&短路。
1-26
几道简单sql题
1-27
几道简单sql题
1-28
调制解调器(Modem)分为两个功能:
- 调制:数字信号转换为模拟信号。
- 解调:模拟信号转换为数字信号。
这道题选A:双绞线中传输模拟信号,即模拟信道。计算机CP里面传输数字信号,Modem的功能是将网线中的数据接收到电脑里面,所以要经过模拟信号转换数字信号,也就是模拟信道传输数字信号
考虑到局域网信道质量好,以太网采取了两项重要的措施以使通信更简便:
①采用无连接的工作方式;
②不对发送的数据帧进行编号,也不要求对方发回确认。因此,以太网提供的服务是不可靠的服务,即尽最大努力的交付。差错的纠正由高层完成。
以太网(10BASE-T、100BASE-T标准)物理拓扑结构为星型,逻辑拓扑结构为总线型。
计算机网络是分布在不同地理位置的多个独立的自治计算机的集合。
拥塞控制算法中,闭环控制是通过反馈机制来调整当前网络流量,使网络流量与网络可用资源和协调。
1-29
Object中没有copy方法
Java通过方法重写和方法重载实现多态
- 方法重写是指子类重写了父类的同名方法
- 方法重载是指在同一个类中,方法的名字相同,但是参数列表不同
在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,也支持了String类型
以上是关于牛客刷题打卡的主要内容,如果未能解决你的问题,请参考以下文章
(基础杂记) —— 2021-07-13 —— 牛客刷题错题记录
(基础杂记) —— 2021-07-13 —— 牛客刷题错题记录