1-10Java选择题
- 下面关于构造方法的说法不正确的是 ()
正确答案: B 你的答案: C (错误)
A. 构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
B.构造方法不可以重载
C.构造方法没有返回值
D. 构造方法一定要和类名相同
1.构造方法也是类的方法,可以在创建对象时为成员变量赋值
2.构造方法可以进行重载,但是参数列表必须不相同,不以返回值和访问级别进行区分
3.构造方法没有返回值
4.构造方法一定要与定义为public的类同名
- 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
正确答案: C 你的答案: D (错误)
A. System.out.println(a.i);
B. a.method1();
C. A.method1();
D. A.method2();
静态成员和静态方法,可以直接通过类名进行调用;其他的成员和方法则需要进行实例化成对象之后,通过对象来调用。
- 以下程序的输出结果是
public class Print{
static boolean out(char c){
System.out.println©;
return true;
}
public static void main(String[] argv){
int i = 0;
for(out(‘A’);out(‘B’) && (i<2);out(‘C’)){
i++;
out(‘D’);
}
}
}
正确答案: A 你的答案: C (错误)
A. ABDCBDCB
B. BCDABCD
C. 编译错误
D. 运行错误
for循环执行开始
首先执行out(‘A’) 输出A;
然后执行out(‘B’)&&(i<2)此时输出B,i=0,判断条件为真,执行for循环的循环体;
执行i++,out(‘D’),输出D i=1;
执行out(‘C’),输出C
然后执行out(‘B’)&&(i<2) 此时输出B,i=1 判断条件为真 ,执行for循环的循环体;
执行i++,out(‘D’),输出D i=2;
执行out(‘C’),输出C
然后执行out(‘B’)&&(i<2) 此时输出B,i=2,不满足i<2 判断条件为假 ,跳出循环;
所以结果为ABDCBDCB
- 以下代码段执行后的输出结果为
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int temp = 1;
try {
System.out.println(temp);
return ++temp;
} catch (Exception e) {
System.out.println(temp);
return ++temp;
} finally {
++temp;
System.out.println(temp);
}
}
}
正确答案: D 你的答案: B (错误)
A. 1,2,2
B. 1,2,3
C. 1,3,3
D. 1,3,2
执行顺序为:
输出try里面的初始temp:1;
temp=2;
保存return里面temp的值:2;
执行finally的语句temp:3,输出temp:3;
返回try中的return语句,返回存在里面的temp的值:2;
输出temp:2。
- 以下哪些方法可以取到http请求中的cookie值()?
正确答案: B D 你的答案: B D (正确)
request.getAttribute
request.getHeader
request.getParameter
request.getCookies
request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据
- 如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);
正确答案: B 你的答案: C (错误)
A. [5, 3, 1, 6]
B. [4, 3, 1, 6]
C. [4, 3, 6]
D. [5, 3, 6]
初始化为{5,3,1}
nums.add(6)后list为{5,3,1,6}
nums.add(0,4)是在0号索引上添加数字4得到list为{4,5,3,1,6}
nums.remove(1)是将1号索引上的5进行remove得到list为{4,3,1,6}
- 以下描述正确的是
正确答案: B 你的答案: C (错误)
A.CallableStatement是PreparedStatement的父接口
B. PreparedStatement是CallableStatement的父接口
C. CallableStatement是Statement的父接口
D. PreparedStatement是Statement的父接口
public interface CallableStatement extends PreparedStatement
public interface PreparedStatement extends Statement
- 下面程序的输出结果是什么。
public class A2{
public static void main(String[] args){
int[] a={2,4,6,8,3,6,9,12};
doSomething(a,0,a.length-1);
for(int i=0;i<=a.length-1;i++)
System.out.print(a[i]+" ");
}
private static void doSomething(int[] a,int start,int end){
if(start<end){
int p=core(a,start,end);
doSomething(a,start,p-1);
doSomething(a,p+1,end);
}
}
private static int core(int[] a,int start,int end)
{
int x=a[end];
int i=start;
for(int j=start;j<=end-1;j++){
if(a[j]>=x){
swap(a,i,j);
i++;//交换了几次
}
}//把最大的放到最后
swap(a,i,end);//把最大的放到i的位置
return i;
}
private static void swap(int[] a,int i,int j)
{
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
正确答案: C 你的答案: D (错误)
找到最大值
找到最小值
从大到小的排序
从小到大的排序 - 下面有关Java的说法正确的是( )
正确答案: A C D F 你的答案: A B D (错误)
一个类可以实现多个接口
抽象类必须有抽象方法
protected成员在子类可见性可以修改
通过super可以调用父类构造函数
final的成员方法实现中只能读取类的成员变量
String是不可修改的,且java运行环境中对string对象有一个对象池保存
c选项意思是父类中的protected方法子类在重写的时候访问权限可以修改
- 下面有关java的引用类型,说法正确的有?
正确答案: A B C D 你的答案: B D (错误)
A. 对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
B. 如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
C. 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
D. 一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间
1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。
11-20数量关系选择题
- 【数字部分】3名小学毕业生有4所不同的中学可以选择,不同的结果有( )种。
正确答案: C 你的答案: C (正确)
7
12
64
81
每名学生选学校结果各自不影响,所以每名学生都有4种选法,即444=64种
- 请根据下列数字的规律,推测括号中的数字应该是多少? 20/9,4/3,7/9,4/9,1/4,( )
正确答案: A 你的答案: B (错误)
5/36
1/6
1/9
1/144
20/9 ➗4/3 = 5/3
7/9 ➗4/9 = 7/4
1/4 ➗? = 9/5
- 1009年元旦是星期四,那么1999年元旦是星期几?
正确答案: B 你的答案: A (错误)
A. 二
B. 五
C. 六
D. 七
如果1009年元旦是星期四,那么1999年元旦确实是星期五。
(1)平年是365天,闰年是366天,365/7余数为1,即每个元旦比上一年的星期数后推1天;
闰年是366/7余数是2,即每个元旦比上一年的星期数后推2天。
(2)计算出有多少个闰年,多少个平年。闰年的定义:1,能被4整除.;2,后面两位是0的年份必须被400整除。
(1999-1009)/4=247 (其中1100,1300,1400,1500,1700,1800,1900共7个不是闰年)。所以:
闰年是247-7=240个,
平年是(1999-1009)-240=750个。
(3)闰年240个,240/7余数2,余下2个闰年,相当于经过2个闰年往后推的天数,则闰年后推天数为22=4天。
平年750个,750/7余数1,余下1个平年,相当于经过1个平年往后推的天数,则平年后推天数为11=1天。
综上所述,后推天数是闰年4天+平年1天=5天,所以1999年元旦是星期二。
- 请根据下列数字的规律,推测括号中的数字应该是多少?6 , 4 , 8 , 9 , 12 , 9 , ( ) , 26 , 30
正确答案: B 你的答案: C (错误)
A. 12
B. 16
C. 18
D. 22
答案是16
解题思路:
前后相对应的数相加是等差数列:
6+30=36
4+26=30
8+?=??
9+ 9=18
12
可以看出他们是公差为6的等差数列,所以,??应为24,从而得出?=24-8=16.
- 某商铺甲乙两组 利用包装礼品的边角料制作一批花朵装饰门店。甲组单独制作需要10小时,乙组单独制作需要15小时,现两组一起做,期间乙组休息了1小时40分钟,完成时甲组比乙组多做300朵,问这批花有多少多?
正确答案: D 你的答案: B (错误)
1350
1500
600
900
速度:甲 ,乙
设乙做了t分钟,则:
得t=300
设这批花有n朵,则
得n=900
16-20判断推理选择题
-
正确答案: B 你的答案: B (正确)
A
B
C
D
-
正确答案: B 你的答案: B (正确)
A.
B.
C.
D.
- 乡间公路上发生一起车祸,肇事司机是位女性,据这位女司机介绍,当时她发现路边有一家餐馆准备停车用餐,误将油门当刹车,汽车径直向前撞向路边车辆,连撞两车后方才停下,万幸的是车上乘客仅受轻伤。有目击者对这起车祸做出如下评论,女司机更容易出车祸。
以下哪项如果为真,最能质疑上述评论( )
正确答案: D 你的答案: B (错误)
有的男司机开车时比较敏捷和果断,很少出车祸
有的女司机开车时比较细心和冷静,很少出车祸
肇事司机已有8年驾龄,技术娴熟,以前从未出过车祸
女司机各有不同,对肇事女司机不能轻率概括、以点概面
逻辑上的“削弱”是有要求的:要在不质疑对方论据的前提下,指出论点未必成立。就这题而言:
论据:一个女司机开车发生了严重的事故
论点:女司机更容易出车祸
首先我们承认,B选项是可以削弱上述论证的。但它力度不够强的原因是它提出了一个与题干相反的论据来作证,这就差事了。另外,通过个例来削弱或加强的力度永远是最差的(除非题干把话说得很绝,例如“所有女司机都容易出车祸”,这时B是最强削弱)。
再看D选项。它完全承认题干的论据是真实的,但同时指出,就算论据是真的,也不能用它来支撑论点。这才是逻辑上的削弱。
- 正确答案: C 你的答案: E (错误)
A
B
C
D
E
F
G
H
把第一列和第三列看作光线
把第二列看作镜面
- 从世界经济的发展历程来看,如果一国或地区的经济保持着稳定的增长速度,大多数商品和服务的价格必然随之上涨,只要这种涨幅始终在一个较小的区间内就不会对经济造成负面影响。
由此可以推出,在一定时期内:
正确答案: C 你的答案: B (错误)
如果大多数商品价格上涨,说明该国经济正在稳定增长
如果大多数商品价格涨幅过大,对该国经济必然有负面影响
如果大多数商品价格不上涨,说明该国经济没有保持稳定增长
如果经济发展水平下降,该国的大多数商品价格也会降低
肯前必肯后,否后必否前
21-20智力题
- 三兄弟中,每两人的平均年龄加另一人的年龄之和分别是58,69,71,那么这三兄弟中年龄最大的与最小的相差几岁?
正确答案: C 你的答案: A (错误)
32
28
26
24
三人年龄分别为x,y,z.根据题意可列出方程
(x+y)/2+z=58 (1)
(x+z)/2+y=69 (2)
(y+z)/2+x=70 (3)
(3)-(1)可得x-z=24 (3)-(2)可得x-y=2 (2)-(1)可得y-z=22 即最大的和最小的相差24岁。
- 有一种体育竞赛共含M个项目,有运动员A,B,C三人参加,在每一项目中,第一,第二,第三名分别得X,Y,Z分,其中X,Y,Z为正整数且X>Y>Z。最后A得22分,B与C均得9分,B在百米赛中取得第一。求M的值及在跳高中谁得第二名。
正确答案: B 你的答案: C (错误)
5, A
5, C
4, B
4, A
M个项目的总分:22+9+9=40
若M=4,则X+Y+Z=10,由X>Y>Z可知
X Y Z
7 2 1
6 3 1
5 3 2
5 4 1
又因为A得22分,故4X>22,那么只有第一种情况满足
即A得分为7 7 7 1,但是这样的话,B和C得分永远不能为9,故矛盾
若M=5,则X+Y+Z=8,由X>Y>Z可知
X Y Z
5 2 1
4 3 1
又A=22,故只有第一种情况满足,故A、B、C得分如下:
A 5 5 5 5 2
B 5 1 1 1 1
C 1 2 2 2 2
故百米赛A得第二,B得第一,C得第三,故C其他项目均得第二,即跳高中C得第二
- 2 ,2 ,8 ,38 ,( )
正确答案: D 你的答案: D (正确)
76
81
144
182
c=5*b-a,相邻三个数分别为a,b,c
- 站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?
正确答案: D 你的答案: B (错误)
1
2
0
无数个
距离南极点很近的一个圈上也满足这个条件。在这个圆圈上,向南走一公里,然后向东走一公里恰好绕南极点一圈,向北走一公里回到原点。所以地球上总共有无数点满足这个条件。
或者首先,在地球表面上,南北走向是沿着经度方向,东西是沿着纬度方向。如果你一直往北走就会达到北极点,往南走就到了南极点。因此,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点,一种情况就是,出发点是在北极点,这样向南走一公里,然后向东走任意几公里,最后向北走一公里,最后都会回到北极点;其次,可以这么认为如果从A点向南走一公里到达B点,那么若向东走一公里能回到B,那么最后向北走一公里,就能回到了原点A。这样就可以先找出在南北极点附近找出绕一周只有1公里的圈,那么这个圈落在南极附近时,只要往北推1公里,此时该圈上的点都能满足;若这个圈落在北极附近时,能不能往北推1公里我就不分析了。反正在南极附近能找到任意多个点就能回到这个问题了。
- A、B、C、D四人应聘一个程序员职位,此职务的要求条件是:Java熟练;懂数据库开发;会Web开发;有C++经验。谁满足的条件最多,谁就被雇用。(1)把上面四个要求条件两两组合,每个组合都恰有一人满足。同时已知(2)A和Bjava熟练(3)B和C会Web(4)C和D懂数据库(5)D有C++经验那么,被雇用的是____。
正确答案: B 你的答案: A (错误)
A
B
C
D
四人机会均等
以上均错
根据已知条件,列出当前了解的技能掌握情况
Java:A和B
WEB:B和C
数据库:C和D
c++:D和B
再写出六种技能组合,结合已知条件进行推测。
Java Web:B会,所以A肯定不会Web (因为A会Java)
Java 数据库:
Java c++:
web 数据库:C会,所以B不会数据库(因为B会WEB),D不会WEB(D会数据库)。
数据库 c++:D会,所以C不会 C++(因为C会WEB)
WEB c++:排除了ACD,只能是B会。
所以能推断出B会三项技能,java web和c++。且只能有一个人会三项技能及以上,否则就不满足"每个组合都恰有一人满足"的条件,故B是会的技能最多的。
LeetCode
743. 网络延迟时间
有 n 个网络节点,标记为 1 到 n。
给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。
现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。
示例 1:
输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
输出:2
输入:times = [[1,2,1]], n = 2, k = 1
输出:1
示例 3:
输入:times = [[1,2,1]], n = 2, k = 2
输出:-1
方法一:深度优先搜索 [Accepted]
让我们记录信号到达节点的时间,若有的信号提前达到,则我们不需要广播这个信号,否则我们将广播这个信号。
算法:
dist[node] 记录的是信号最早到达 node 的时间。当我们访问 node 时,若经过了传递时间这个信号是最早到达该节点的,则我们广播这个信号
为了加快速度,在访问每个节点时,若传递该信号的时间比已有信号到达的时间长,则我们退出该信号。
class Solution {
Map<Integer, Integer> dist;
public int networkDelayTime(int[][] times, int N, int K) {
Map<Integer, List<int[]>> graph = new HashMap();
for (int[] edge: times) {
if (!graph.containsKey(edge[0]))
graph.put(edge[0], new ArrayList<int[]>());
graph.get(edge[0]).add(new int[]{edge[2], edge[1]});
}
for (int node: graph.keySet()) {
Collections.sort(graph.get(node), (a, b) -> a[0] - b[0]);
}
dist = new HashMap();
for (int node = 1; node <= N; ++node)
dist.put(node, Integer.MAX_VALUE);
dfs(graph, K, 0);
int ans = 0;
for (int cand: dist.values()) {
if (cand == Integer.MAX_VALUE) return -1;
ans = Math.max(ans, cand);
}
return ans;
}
public void dfs(Map<Integer, List<int[]>> graph, int node, int elapsed) {
if (elapsed >= dist.get(node)) return;
dist.put(node, elapsed);
if (graph.containsKey(node))
for (int[] info: graph.get(node))
dfs(graph, info[1], elapsed + info[0]);
}
}
方法二:迪杰斯特拉最短路径算法(Dijkstra’s)[Accepted]
算法:
我们使用 Dijkstra’s 算法找到从源节点到所有节点的最短路径,可以点击这个链接了解更多详细信息。
Dijkstra’s 算法是每次扩展一个距离最短的点,更新与其相邻点的距离。
在下面的代码中,我们展示了 O(N^2)O(N
2
) 的基本实现方法 和 O(N \log N)O(NlogN) 用堆实现的方法。
class Solution {
Map<Integer, Integer> dist;
public int networkDelayTime(int[][] times, int N, int K) {
Map<Integer, List<int[]>> graph = new HashMap();
for (int[] edge: times) {
if (!graph.containsKey(edge[0]))
graph.put(edge[0], new ArrayList<int[]>());
graph.get(edge[0]).add(new int[]{edge[1], edge[2]});
}
dist = new HashMap();
for (int node = 1; node <= N; ++node)
dist.put(node, Integer.MAX_VALUE);
dist.put(K, 0);
boolean[] seen = new boolean[N+1];
while (true) {
int candNode = -1;
int candDist = Integer.MAX_VALUE;
for (int i = 1; i <= N; ++i) {
if (!seen[i] && dist.get(i) < candDist) {
candDist = dist.get(i);
candNode = i;
}
}
if (candNode < 0) break;
seen[candNode] = true;
if (graph.containsKey(candNode))
for (int[] info: graph.get(candNode))
dist.put(info[0],
Math.min(dist.get(info[0]), dist.get(candNode) + info[1]));
}
int ans = 0;
for (int cand: dist.values()) {
if (cand == Integer.MAX_VALUE) return -1;
ans = Math.max(ans, cand);
}
return ans;
}
}
堆实现的方式:
PythonJava
class Solution {
public int networkDelayTime(int[][] times, int N, int K) {
Map<Integer, List<int[]>> graph = new HashMap();
for (int[] edge: times) {
if (!graph.containsKey(edge[0]))
graph.put(edge[0], new ArrayList<int[]>());
graph.get(edge[0]).add(new int[]{edge[1], edge[2]});
}
PriorityQueue<int[]> heap = new PriorityQueue<int[]>(
(info1, info2) -> info1[0] - info2[0]);
heap.offer(new int[]{0, K});
Map<Integer, Integer> dist = new HashMap();
while (!heap.isEmpty()) {
int[] info = heap.poll();
int d = info[0], node = info[1];
if (dist.containsKey(node)) continue;
dist.put(node, d);
if (graph.containsKey(node))
for (int[] edge: graph.get(node)) {
int nei = edge[0], d2 = edge[1];
if (!dist.containsKey(nei))
heap.offer(new int[]{d+d2, nei});
}
}
if (dist.size() != N) return -1;
int ans = 0;
for (int cand: dist.values())
ans = Math.max(ans, cand);
return ans;
}
复杂度分析
时间复杂度: EE 是 times 的长度。基础实现方式为 O(N^2 + E)O(N
2
+E)。堆实现方式为 O(E \log E)O(ElogE),因为每个边都可能添加到堆中。
空间复杂度:O(N + E)O(N+E),图的大小是 O(E)O(E) 加上其他对象的大小 O(N)O(N)。