目录
2. HashMap中put相同key时会覆盖已存在的value
5. ArrayList传参,数组就是参数大小,如果没传参数组默认大小10,以1.5倍扩容
6. ReadWriteLock即为读写锁,使用于读多写少的并发场景
9. 一段代码只会抛出一个异常,最有可能的是IOException编辑
11. 包装类是被final修饰不可变的,创建新对象,作为参数传递时,形参和实参不会指向一个地址,传入参数的值不会改变
1. 扑克牌大小
题目链接:扑克牌大小_牛客题霸_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] array = str.split("-");
String[] arr1 = array[0].split(" ");
String[] arr2 = array[1].split(" ");
String s1 = "34567891JQKA2";
if(array[0].equals("joker JOKER") || array[1].equals("joker JOKER")) {
System.out.println("joker JOKER");
}else if(arr1.length == arr2.length) {
if(s1.indexOf(arr1[0].substring(0,1)) > s1.indexOf(arr2[0].substring(0,1))) {
System.out.println(array[0]);
}else {
System.out.println(array[1]);
}
}else if(arr1.length == 4) {
System.out.println(array[0]);
}else if(arr2.length == 4) {
System.out.println(array[1]);
}else {
System.out.println("ERROR");
}
}
}
2. HashMap中put相同key时会覆盖已存在的value
HashMap在插入新元素时,会使用equals()方法判断集合中是否已经存在与新元素key相同的元素,如果存在,新元素会覆盖和他key相同的对象
HashMap允许null作为key和vaule,所以这道题中先放入name-null然后第二次放name-Jack时,因为key一样所以jack会把null覆盖掉,此时map中只有一个key-value
3. 数据库JDBC操作时使用到的接口
这些都是进行数据库JDBC操作时用到的,用于连接数据库的时候使用的接口
PreparedStatement是CallableStatement的父接口
而PreparedStatement继承自Statement
CallableStatement继承自PreparedStatement
4. 接口使用来实现的
必须要明确的是接口是用来实现的,LinkedList实现List接口,
AbstractSet实现Set接口;Abstract是抽象类,HashSet继承自AbstractSet,C对
WeakHashMap继承自HashMap,而WeakMap不继承于HashMap,WeakMap也是键值对,不过是弱的引用对象,值可以为任意类型
5. ArrayList传参,数组就是参数大小,如果没传参数组默认大小10,以1.5倍扩容
如果new对象时,不传参数
ArrayList list = new ArrayList();
此时add给list添加数据时,才会去创建数组,默认数组大小为10,当添加第11个元素时,才会以1.5倍当前数组大小扩容
所以要区分new ArrayList对象时传没传参数
6. ReadWriteLock即为读写锁,使用于读多写少的并发场景
D:volatile只保证内存可见性,不保证原子性,还有防止指令重排序作用
C:ConcurrentHashMap只给写操作加锁,读操作不加锁
A:CopyonWriteArrayList适用于写少读多的并发场景
用于替代同步List,提供更好的并发性能。写入时复制(Copy-On-Write)是每当修改时就会复制,这需要一定的开销。仅当迭代操作远远多于修改操作时,才应该使用写入时复制。即适用于读多写少
读的时候不需要加锁,如果读的时候有多个线程正在向ArrayList添加数据,读还是会读到旧的数据,因为写的时候不会锁住旧的ArrayList。
B:ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,
读与读之间可以并发执行。在读多写少的情况下可以提高效率
7. 最近公共祖先
题目链接:最近公共祖先_牛客题霸_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.*;
public class LCA {
public int getLCA(int a, int b) {
while (a != b) {
if(a < b) {
b /= 2;
}else if(a > b) {
a /= 2;
}
}
return a;
}
}
8. 求最大连续bit数
题目链接:求最大连续bit数_牛客题霸_牛客网 (nowcoder.com)
题目要求:
题目分析:
总体的步骤就是,将这个int类型转为二进制,统计连续1的个数,找出连续1个数最多的输出
上代码
public static void main1(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
int count = 0;
int countMax = 0;
while(n != 0) {
if((n&1) == 1) {
count++;
countMax = Math.max(count,countMax);
}else {
count = 0;
}
n >>= 1;
}
System.out.println(countMax);
}
}
思路二
还有一种方法,输入的是int类型的,但是计算时却是以二进制来看的
在Integer类中有静态方法是
toBinaryString(int i):返回int变量的二进制表示的字符串。
toHexString(int i):返回int变量的16进制字符串。
toOctalString(int i):返回int变量的8进制表示字符串。
所以我们这里可以使用Integer.toBinaryString来把int转为二进制字符串
此时可以使用split() 以0来进行分割,变为字符数组
此时这个数组中每个下标中放的就是连续1的字符串
对每个下标字符串求长度,就可以找到最长的输出
上代码
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
String s = Integer.toBinaryString(n);
String[] array = s.split("0");
int result = 0;
for (int i = 0; i < array.length; i++) {
if(array[i].length() > result) {
result = array[i].length();
}
}
System.out.println(result);
}
}
9. 一段代码只会抛出一个异常,最有可能的是IOException
try中出现异常,只能被一个catch捕捉到,其中最有可能的就是IOException,选A
10. 检查异常需要处理,非检查异常不需要
ABD是非检查异常,C是检查异常,需要用try-catch捕捉或throws声明
首先明确 异常分为检查型异常和非检查型异常
非检查异常主要是 运行时异常(RuntimeException极其子类) 和 错误(Error)。编译器是不会进行检查并且不要求必须处理的异常,当程序中出现这种异常时,即使没有“try-catch”捕捉,也没有使用“throws”抛出该异常,编译器也会正常通过
检查异常是除了“Error” 和“RuntimeException”的其他异常,这个是编译器必须要处理的异常,这种异常一般是由程序的运行环境导致的,所以必须要处理
11. 包装类是被final修饰不可变的,创建新对象,作为参数传递时,形参和实参不会指向一个地址,传入参数的值不会改变
需要注意这道题 a 和 b 前面是byte是包装类Byte,包装类是被final修饰不可变的的,所以这里的b++是创建了一个新对象,既然是对象,那么参数传递时,传的就是地址了,值是不会被改变的
add(++a)这里把a修改为了128,但是a是byte类型取值范围是-128-127,此时a就会变为-128
然后add(b)因为传入add中的值是不会被改变的,所以输出127
也就是输出 -128 127 选D
12. 二进制插入
题目链接:二进制插入_牛客题霸_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.*;
public class BinInsert {
public int binInsert(int n, int m, int j, int i) {
m <<= j;
return n | m;
}
}
13. 关系数据库逻辑性强而物理性弱
数据库插入记录的前后顺序是否会影响查询结果,关系型数据库的逻辑性比较强,在物理关系上没有严格要求,前后顺序颠倒不会影响记录之间的关系。
14. 视图是虚表,只能查询,数据不可被修改
视图只能被查询,数据是不可更改的 B错
首先明白什么叫视图,视图的作用是什么,怎么来创建
1.视图的定义
视图是指计算机数据库中的视图, 它是从一个或几个基本表(或视图)导出来的表,它是虚拟表。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据还是存放在原来的基本表中。所以基本表中的数据发生变化时,视图中查询出的数据也就改变了。视图只供查询,数据不可更改
2.视图的作用
(1)视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结果及其之间的关系
(2)视图提供了一个统一访问数据的接口(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)
(3)加强了安全性,使用户只能看到视图所显示的数据
(4)视图还可以被嵌套。一个视图可以嵌套另一个视图
3.创建视图
(1)create view 视图名 as 查询语句
(2)这个视图没有就创建,有就修改 CREATE OR REPLACE VIEW 视图名 AS 查询语句;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91214.html