本次题目出自某大型安全公司(开发岗(只招985,211))笔试题:

扩展知识:
运行时异常(RuntimeException):在程序运行的时候就会出现的异常
1.NullPointerException:空指针异常
2.indexOutofBoundsException:索引超出了范围
3.ArrayIndexOutOfBoundsException:数组索引越界
4.NumberFormatException:数值转换异常
5.ClassCastException:类型转换异常
6.ArithmeticException:算数异常
编译时异常:在编译时期就显式的通知程序猿必须处理
ClassNotFoundException:未找到类的异常
IOException:IO异常
所以应该选B

首先频繁进行插入删除,A肯定要排除,因为ArrayList的插入删除效率很低。其次要求有序,所以应该为B.

首先排除A因为判断是空串要用equals方法,再看B项,首先s.equals就不正确,因为我们并不知道s是不是null,如果这样书写可能会出现空指针异常所以排除,再看C项C正确,D项可以代入几个值去就可以发现逻辑错误。

首先interfatce是可以被继承的,B项中并非所有的方法都是抽象的,抽象类的方法可以不是抽象的。CD都正确。

我感觉大家一开始学的时候肯定都知道HashMap是线程不安全的。而在B项中启动线程应该是start()方法,run()方法是线程的方法体。C项中synchronized可以修饰实例方法,可以修饰静态方法,可以修饰代码块但是并不能修饰变量。
线程的状态:1.新建(new)2.就绪状态(runnable)3.运行状态:running
4.阻塞状态(blocked)5.结束状态(dead)

理论上一共有四种方法(不过有一种方法只能遍历出value所以我就不写了):
先给一个map集合,这里我就不每种都跑一下了,有兴趣的伙伴可以自己把代码粘贴到自己的IDE里面去跑,或者自己尝试着写一下
Map<String,String> map = new HashMap<String,String>();
map.put("姓名","张三");
map.put("年龄","20");
map.put("体重","85");
第一种:
for(Map.Entry<String,String> entry:map.entrySet()){
System.out.println(entry.getKey()+entry.getValue());
}
第二种:
for(String key:map.keySet()){
System.out.println(key+map.get(key));
}
这种方式直接单独遍历其key值和value值
第三种:
Iterator<Map.Entry<String,String>> entries = map.entrySet().iterator();
while (entries.hasNext()){
Map.Entry<String,String> entry = entries.next();
System.out.println(entry.getKey()+entry.getValue());
}

这个问题首先有两种思路:
一种是将这1000个数字加起来而后减去1-999相加的和,那么就可以求出来到底是哪一个数。另一种是先新创建出来一个新的数组,将原来的数一个一个取出来,放入指定的下标,当然了放之前先看看这个位置是否有元素,如果有的话就说明这个元素是重复的。
首先第一个方法是求和然后求出:这里我就省点事直接在主函数里面写了,如果你想好好归纳下,那就自己总结一下
public class FindNumberBySum {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList();
int limit = 1000;
for(int i = 1;i<limit;i++){
arrayList.add(i);
}
//在数组里面添加一个重复的元素5
arrayList.add(6);
//定义arraylist的和
int sum = 0;
for(int j:arrayList){
sum+=j;
}
int suma = 499500;
int result = sum - suma;
System.out.println("重复的数字是"+result);
}
}
而后第二个方法就是根据比较数组中的元素:
public class FindNumberByArray {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList();
int limit = 1000;
for(int i = 1;i<limit;i++){
arrayList.add(i);
}
//在数组里面添加一个重复的元素5
arrayList.add(6);
int[] arr = new int[999];
for(int i:arrayList){
if(arr[i-1] == 0){
arr[i-1] = i;
}else {
System.out.println("重复的数是"+i);
}
}
}
}
这里提醒一下,sql查询的题目非常重要,我当时就因为联合查询不是很好错过了一次机会,当然了虽然就算那个公司要我我也不会去的,哈哈,积累面试经验


1.
我的sql真的很差,一般我都是去百度写的,最近真的是没办法了,自己也在好好练,孰能生巧,其实我有时候也知道原理只不过自己总是理不清。
SELECT id,sname,cname,score FROM T_Score sc LEFT JOIN T_Student s ON sc.sid = s.id LEFT JOIN T_Course c ON sc.cid = c.cid
SELECT id,sname,AVG(score) FROM t_score sc LEFT JOIN t_student s ON sc.`sid` = s.`id` GROUP BY sid
delete删除的时候就是一条一条的删除记录,它可以配合事务,将删除掉的数据找回——rollback。
truncate删除,是将整个表摧毁,然后再创建一张一模一样的表,它删除的数据将无法找回。
delete删除的id不会重置,比如我们将主键设置为自增类型用delete删除后id不会重置,而会在原来的基础上继续增加。再使用truncate操作后id会重置,因为它删除了原本的表结构又重构了一张一模一样的表,所以再次插入数据的时候就从1开始。
数据库索引是对数据库表中一列或者多列的值进行排序的一种结构。用数据库索引是为了提升检索速度,加速表与表之间的链接。
遵循的原则
1.表的主键,外键必须有索引;
2.数量超过300的表应该有索引;
3.经常与其他表进行链接的表,在链接字段上应该建立索引;
4.经常出现在Where子句的字段,特别是大表的字段,应该建立索引;
5.索引应该建立在选择性高的字段上面;
6.索引应该建立在小字段上面,对于大的文本字段甚至超长字段,不要建立索引;
7.建立符合索引的时候要进行仔细的思考,尽量用单字段索引代替;
8.频繁进行数据操作的表,不要建立太多的索引;
9.删除无用的索引,避免对执行计划造成负面影响;

在使用Log4j输出日志的时候,error(Object obj)只传入一个参数的时候作为异常对象作为Object使用,并且最终作为String打印出来,当使用两个参数error(String message,Throwable t),且第二个参数为Throwable时,才将完整的异常堆栈打印出来

当bean的scope为singleton时,Spring容器仅创建一个对象,当下次获取的时候还是第一次创建出来的对象,且获取的对象引用也相同。当使用 == 符号判断两个获取的对象时,得到的结果为true。
当bean的scope为prototype是,Spring容器在用户获取该对象是创建一个新的对象。每次获取都创建一个全新的对象给用户操作。

isNotNull用于判断参数是否不为Null,不为null的时候,执行标签体内部的语句。
isNotEmpty用于判断参数是否同时不为null或者空串,当参数既不为Null也不是空的时候为true,判断之后再做相应的表达式的操作。

Spring是一个一站式轻量级的Java框架,它的核心是IOC控制反转(用于管理对象的生命周期和对象之间的关系)和AOP的面向切面编程(将主线业务与一些功能性代码分离)。
SpringMVC是Spring基础之上的一个MVC框架,主要用于代替项目中的控制层,主要处理Web开发的路径映射和视图渲染。
SpringBoot是整合三方的常用框架的东西,简化了很多的配置,默认的东西大于配置,简化了配置流程,内置Http服务,命令方式启动项目。
SpringCloud是基于SpringBoot服务的,与其说是一种技术或者框架更不如说是一种思想,主要是更加关注于全局微服务的整合和管理,相当于管理多个SpringBoot框架的单体微服务。

Filter是过滤器,实际应用的时候,可以完成以下任务:
1.访问特定的资源的时候的身份认证
2.访问资源的审核和记录
3.对资源的加密访问
4.对被访问资源的及时转换
listener是监听器
ServletContextListener 这个方法只能监听ServletContext的创建和销毁的方法。
ServletContextAttributeListener
这个监听器可以监听ServletContext中属性的添加,删除和替换。
HttpSessionListener
这个监听器可以监听session的创建和销毁

| 属性 | 说明 |
|---|---|
| name=value | 键值对,可以设置要保存的Key./Value |
| Domain | 域名,默认的是当前域名 |
| maxAge | 最大失效时间(毫秒),设置在多少后失效 |
| secure | 当secure的值为true的时候,cookie在HTTP中无效,在HTTPS中才有效 |
| Path | 表示cookie影响到的路径,如path=/。如果路径不能匹配的时候,浏览器不发送这个Cookie |
| Expires | 过期时间(秒),在设置某个时间点后该Cookie会失效,如expires=Money,05-Dec-11 22:22:22 GMT |
| httpOnly | 如果在COOKIE中设置了httpOnly属性,则通过程序(JS脚本)将无法读取到COOKIE信息,防止XSS攻击 |

$(".btn1")
$(“input:first”)
$(“div>input:first”)
我的JQuery和vue一向不是很好,所以这里我就大概写了下

这道题的思路是,第一箱取出1个罐头第二箱取出来两个所以最后一共是取出来了55个罐头,如果全部是正品的话应该是应该是55x50=2750克,这时候就只需要称一下你取出来的所有罐头的重量,少多少个55-45=5克就是那一箱有问题。

首先分析思路:每次都要必须持有手电筒,所以这里分析出来两人过桥必须以慢的为准,其次必须要在过桥后有人将电筒带回来照明。
所以一开始甲乙先过桥是2分钟(两个人过桥以慢的为准)
而后甲带手电筒回来要1分钟
而后丙丁过桥要7分钟
而后乙带手电筒回来要2分钟
而后甲乙又同时过桥要2分钟
所以一共要2+2+2+1+7=14分钟

可以知道有三个人带了黑色的帽子,首先如果只有一个人带着黑色的帽子,那么他肯定要拍手了。但是没有拍手所以可以肯定不仅仅一个人戴着黑色的帽子。第二次开灯,如果仅仅有两个人戴着黑色的帽子,那么其中一个戴着黑色帽子的人看到其他人之中仅仅有一个戴着黑色帽子,肯定知道自己头上也是黑帽子不然对方第一次就该拍手了,所以可以推测出来自己头上肯定也是黑色的帽子。而后第三次开灯关灯,之所以有人拍手,肯定是因为带黑帽子的人肯定从第二次开灯的时候他眼睛里面仅有的两个带黑色帽子的人没有拍手,所以肯定自己头上也是黑色帽子,所以一共有三顶黑色的帽子。

2^10=1024,所以最少只需要10个人就可以试出来毒酒,
我们给10个死刑犯看成十位二进制数
0000,0000,00
假如第一瓶毒酒我们就给最后一个人喝就是
0000,0000,01
假如第200瓶
0011,0010,00
第1000瓶:
11,1110,1000
最后等24个小时我们就知道到底哪一瓶里面有毒了。
本文针对某大型安全公司的Java笔试题进行了详细的解答与分析,包括异常处理、集合类使用、线程状态、SQL查询技巧等内容。
2991

被折叠的 条评论
为什么被折叠?



