20201021:算法+错题

it2025-08-26  1

文章目录

错题一错题二错题三错题四错题五错题六错题七错题八错题九错题十错题十一算法一

错题一

下列程序的运行结果是String str1 = "hello"; String str2 = "he" + new String("llo"); System.err.println(str1 == str2); 答案及解析:B String str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; String str2 = "he" + new String("llo"); 这里的str2必须在运行时才知道str2是什么,所以它是指向的是堆里定义的字符串“hello”,所以这两个引用是不一样的。 如果用str1.equal(str2),那么返回的是True;因为两个字符串的内容一样。

错题二

根据下面的程序代码,哪些选项的值返回true?public class Square { long width; public Square(long l) { width = l; } public static void main(String arg[]) { Square a, b, c; a = new Square(42L); b = new Square(42L); c = b; long s = 42L; } } 答案及解析:C a = new Square(42L); b = new Square(42L); 这里new了两个对象,所以a,b不是同一个引用a!=b s的类型跟a,b不同类型,所以s!=a,s!=b c = b; 这里b,c是同一个对象的引用,所以b==c是true

错题三

一般情况下,以下哪个选项不是关系型数据模型与对象模型之间匹配关系?答案及解析:D 一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起, 它们通过配置文件中的many-to-one、one-to-many、many-to-many

错题四

下列的方法,当输入为2的时候返回值是多少?public static int getValue(int i) { int result = 0; switch (i) { case 1: result = result + i; case 2: result = result + i * 2; case 3: result = result + i * 3; } return result; } 答案及解析:D 没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。

错题五

如下语句通过算术运算和逻辑运算之后i和j的结果是()int i=0; int j=0; if((++i>0)||(++j>0)) { //打印出i和j的值。 } 答案及解析:D &&和||为短路与 短路或 &&若前面的表达式为false,整个逻辑表达式为false,所以后面的表达式无论true和false都无法影响整个表达式的逻辑结果, 所以为了提高代码执行速率,这里后面的表达式就不会执行。 同理,若前面表达式为true,则后面的表达式无需计算。 &和|为不短路与不短路或 无论什么情况,前面的和后面的都要执行。

错题六

下列关于一个类的静态成员的描述中, 不正确的是

答案及解析:D

类的静态成员与类直接相关,与对象无关,在一个类的所有实例之间共享同一个静态成员,A正确 静态成员函数中不能调用非静态成员,C正确 非静态成员函数中可以调用静态成员,B正确 常量成员才不能修改,静态成员变量必须初始化,但可以修改(例如我们常利用静态成员变量统计某个函数的调用次数),D错误

错题七

下列代码运行输出的是()public class Person{ private String name = "Person"; int age=0; } public class Child extends Person{ public String grade; public static void main(String[] args){ Person p = new Child(); System.out.println(p.name); } } 答案及解析:C 1.一个java文件里,public 的类只能出现一个,只能出现一个,只能出现一个,否则,不管你用哪一个类名命名文件名编译器都会报错 2.关于多态。子类继承了父类的所有成员,包括private权限的成员变量,但是继承的子类具有私有变量的拥有权但是没有使用权。 3.private的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。

错题八

下列代码的输出结果是? class Value{ public int i=15; } public class Test{ public static void main(String argv[]){ Test t=new Test( ); t.first( ); } public void first( ){ int i=5; Value v=new Value( ); v.i=25; second(v,i); System.out.println(v.i); } public void second(Value v,int i){ i = 0; v.i = 20; Value val = new Value( ); v = val; System.out.println(v.i+" "+i); } }

答案及解析:A

本题考查两个知识点: 1.局部变量名字会屏蔽点外作用域同名字变量 2.函数的参数传递 classValue{ publicinti=15; } publicclassTest{ publicstaticvoidmain(String argv[]){ Test t=newTest( ); t.first( ); } publicvoidfirst( ){ inti=5;//注意这个i是局部变量 Value v=newValue( ); v.i=25;//创建了一个Value对象,并把此对象的属性i赋值25(默认值为15) second(v,i);//v (v中的属性i值为25) 和 局部变量i 传进函数second System.out.println(v.i);//v的属性i在second函数中被改为了20 } publicvoidsecond(Value v,inti){ i = 0;//second函数中的局部变量,和之前的i没关系 v.i = 20;//将传进的V的属性i改为20 Value val = newValue( ); v = val;//新创建的Value对象val,属性i值为15,并将v指向val对象,v已经和之前传进来的对象没关系了 System.out.println(v.i+" "+i);//此时v的属性i为15,先输出 15(v.i) 0(i) } }

错题九

Java中的集合包括ArrayList,LinkedList,HashMap等,下列关于集合类描述正确的是?()

答案及解析:A B D

A、HashMap实现了Map接口的,它的Key和Value都可以是null,但是Hashtable种,Key和Value都不能是null。 B、ArrayList与LinkedList都实现了List接口,继承了AbstractList类。 C、ArrayList底层是动态数组是实现,随机位置添加和删除,都需要移动数组的数据,而LinkedList底层是双向链表,只需要修改Node节点的引用。 D、随机访问数组要比链表块。 数据结构线程安全查询增&删扩容ArrayList动态数组不安全快慢默认10&1.5倍扩容LinkedList双向链表不安全慢快

错题十

关于运行时常量池,下列哪个说法是正确的?

答案及解析:B C D

在JDK1.8之前运行时常量池被放在方法区,属于线程共享,JDK1.8之后,元空间取代了方法区,运行时常量池被也被放在元空间中, 运行时常池 主要存放, class文件元信息描述,编译后的代码,引用类型数据,类文件常量池。所谓的运行时常量池其实就是将 编译后的类信息放入运行时的一个区域中,用来动态获取类信息。运行时常量池是在类加载完成之后,将每个class常量池中的 符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用, 与全局常量池中的引用值保持一致。 运行时常量池是方法区的一部分。Class 文件中除了有类的版本、字段、方法、接口等描述信息外,还有常量池信息(用于存放 编译期生成的各种字面量和符号引用)

错题十一

下列哪些方法是线程安全的(所谓的方法都存在)?

答案及解析:A C D

public class MyServlet implements Servlet { public void service (ServletRequest req, ServletResponse resp) { BigInteger I = extractFromRequest(req); encodeIntoResponse(resp,factors); } } public class MyServlet implements Servlet { private long count =0; public long getCount() { return count; } public void service (ServletRequest req, ServletResponse resp) { BigInteger I = extractFromRequest(req); BigInteger[] factors = factor(i); count ++; encodeIntoResponse(resp,factors); } } public class MyClass { private int value; public synchronized int get() { return value; } public synchronized void set (int value) { this.value = value; } } public class Factorizer implements Servlet { private volatile MyCache cache = new MyCache(null,null); public void service(ServletRequest req, ServletResponse resp) { BigInteger i = extractFromRequest(req); BigInteger[] factors = cache.getFactors(i); if (factors == null) { factors = factor(i); cache = new MyCache(i,factors); } encodeIntoResponse(resp,factors); } 这几个类都没有类属性,不存在共享资源.为了满足题目的意思.应该是多线程情况下使用同一个对象.以达到使成员成为共享 资源的目的; A:没有成员(没有共享资源),线程安全; B:假设存在线程1和线程2,count初始值为0,当线程1执行count++中count+1(此时未写回最终计算值),这时线程2执行 count++中读取count,发生数据错误,导致线程1线程2的结果都为1,而不是线程1的结果为1,线程2的结果为2,线程不安全; C:成员私有,对成员的set get方法都加重量级锁,线程安全; D:volatile有两个作用:可见性(volatile变量的改变能使其他线程立即可见,但它不是线程安全的,参考B)和禁止重排序; 这里是可见性的应用,类中方法对volatile修饰的变量只有赋值,线程安全; 欢迎指正。

算法一

你的朋友正在使用键盘输入他的名字name,偶尔,在键入字符c时,按键可能会被长按,而字符可能会被输入1次或多次。你将会检查键盘输入的字符typed,如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回true。

示例1:

输入:name = "alex", typed = "aaleex" 输出:true 解释:'alex' 中的 'a' 和 'e' 被长按。

示例2:

输入:name = "saeed", typed = "ssaaedd" 输出:false 解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。

示例3:

输入:name = "leelee", typed = "lleeelee" 输出:true

示例4:

输入:name = "laiden", typed = "laiden" 输出:true 解释:长按名字中的字符并不是必要的。

提示:

1.name.length<=1000

2.typed.length<=1000

3.name和typed的字符都是小写字母

class Solution { public boolean isLongPressedName(String name, String typed) { int i=0,j=0; while(j<typed.length()){ if(i<name.length()&&name.charAt(i)==typed.charAt(j)){ i++; j++; }else if(j>0&&typed.charAt(j)==typed.charAt(j-1)){ j++; }else{ return false; } } return i==name.length(); } }
最新回复(0)