java面试笔试总结(一)--亲生经历的面试题
说明:本文只是自己的一些心得体会,答案也是自己写的,正确与否,还需考证
java笔试题
1java笔试题1
启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20….以此类推,知道 打印到75.
package bishi.thread1; /** * 启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20….以此类推,知道 打印到75. */ public class ThreadTest { static int i = 0; public static void main(String[] args) { Thread1 thread1 = new Thread1(); Thread2 thread2 = new Thread2(); Thread3 thread3 = new Thread3(); thread1.setName("线程一:"); thread2.setName("线程二:"); thread3.setName("线程三:"); thread1.start(); thread2.start(); thread3.start(); } } class Thread1 extends Thread { public void run() { while (ThreadTest.i < 75) { synchronized (ThreadTest.class) { // 注意不能这么写,synchronized (ThradTest.i),因为i是一个变量而不是一个对象 if (ThreadTest.i < 75) { if (ThreadTest.i % 15 == 0) { for (int i = 1; i < 6; i++) { System.out.println(Thread.currentThread().getName() + ++ThreadTest.i); } } } } } } } class Thread2 extends Thread { public void run() { while (ThreadTest.i < 75) { synchronized (ThreadTest.class) { // 注意不能这么写,synchronized (ThradTest.i),因为i是一个变量而不是一个对象 if (ThreadTest.i < 75) { if ((ThreadTest.i - 5) % 15 == 0) { for (int i = 1; i < 6; i++) { System.out.println(Thread.currentThread().getName() + ++ThreadTest.i); } } } } } } } class Thread3 extends Thread { public void run() { while (ThreadTest.i < 75) { synchronized (ThreadTest.class) { // 注意不能这么写,synchronized (ThradTest.i),因为i是一个变量而不是一个对象 if (ThreadTest.i < 75) { if ((ThreadTest.i - 10) % 15 == 0) { for (int i = 1; i < 6; i++) { System.out.println(Thread.currentThread().getName()+ ++ThreadTest.i); } System.out.println(); } } } } } }
执行结果
D:\java\jdk\jdk1.7\installpath\bin\java "-javaagent:D:\tool\idea\installpath\IntelliJ IDEA 2017.3.2\lib\idea_rt.jar=62126:D:\tool\idea\installpath\IntelliJ IDEA 2017.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jdk\jdk1.7\installpath\jre\lib\charsets.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\deploy.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\access-bridge-64.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\dnsns.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\jaccess.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\localedata.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\sunec.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\sunjce_provider.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\sunmscapi.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\ext\zipfs.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\javaws.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\jce.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\jfr.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\jfxrt.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\jsse.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\management-agent.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\plugin.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\resources.jar;D:\java\jdk\jdk1.7\installpath\jre\lib\rt.jar;E:\javaweb\zijide\test\out\test\test;E:\javaweb\zijide\test\lib\axis-ant.jar;E:\javaweb\zijide\test\lib\axis.jar;E:\javaweb\zijide\test\lib\cglib.jar;E:\javaweb\zijide\test\lib\commons-discovery-0.2.jar;E:\javaweb\zijide\test\lib\commons-logging-1.0.4.jar;E:\javaweb\zijide\test\lib\jaxrpc.jar;E:\javaweb\zijide\test\lib\log4j-1.2.17.jar;E:\javaweb\zijide\test\lib\junit-4.8.2.jar bishi.thread1.ThreadTest
线程一:1
线程一:2
线程一:3
线程一:4
线程一:5
线程二:6
线程二:7
线程二:8
线程二:9
线程二:10
线程三:11
线程三:12
线程三:13
线程三:14
线程三:15
线程一:16
线程一:17
线程一:18
线程一:19
线程一:20
线程二:21
线程二:22
线程二:23
线程二:24
线程二:25
线程三:26
线程三:27
线程三:28
线程三:29
线程三:30
线程一:31
线程一:32
线程一:33
线程一:34
线程一:35
线程二:36
线程二:37
线程二:38
线程二:39
线程二:40
线程三:41
线程三:42
线程三:43
线程三:44
线程三:45
线程一:46
线程一:47
线程一:48
线程一:49
线程一:50
线程二:51
线程二:52
线程二:53
线程二:54
线程二:55
线程三:56
线程三:57
线程三:58
线程三:59
线程三:60
线程一:61
线程一:62
线程一:63
线程一:64
线程一:65
线程二:66
线程二:67
线程二:68
线程二:69
线程二:70
线程三:71
线程三:72
线程三:73
线程三:74
线程三:75
Process finished with exit code 0
2java笔试题2,面试也问答过
spirng的三大核心思想,并简单描述
1 aop即面向切面编程:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。日志,前置通知,后置通知,返回通知,异常通知,事务拦截器。 2 ioc即控制反转:容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源。 3 DI依赖注入:组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入。有属性注入和构造器注入两种方式。
3java笔试题3
JAVA随机输出10个数不重复并且按顺序从小到大排列
package bishi.suiji; import org.junit.Test; /** * JAVA随机输出10个数不重复并且按顺序从小到大排列. * */ public class RandomTest { static int[] ary = new int[1000]; // 默认给ary数组里每一个数的初始值都为零 @Test public void test2() { int flag=1; while (flag<10) { // 获取到十个不重复的数 int random =(int)(Math.random()*1000); // 从[0,1000)中获取一个的随机数 if (ary[random] == 0) { // 判断是否重复,这里利用桶排序的方式来判断 ary[random]++; flag++; // 每获取一个不重复的数,就加一 } } for (int j = 0; j < ary.length; j++) { if (ary[j] !=0) { System.out.println(j); } } } }
输出结果
202
263
279
326
386
486
527
887
955
- js笔试题2
js实现一个打点计时器,问题描述:
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出
<html> <body> <script> function count(start, end) { //立即输出第一个值 console.log(start++); var timer = setInterval(function(){ if(start <= end){ console.log(start++); }else{ clearInterval(timer); // 停止timer计数器 } },100); // 每隔100毫秒执行一次 //返回函数名为cancel的函数 return { cancel : function(){ clearInterval(timer); } }; } count(0,100); // 调用计数器 </script> </body> </html>
4java笔试题4
如下代码执行结果是多少?为什么?
package pri.lsx.test.mianshiti; public class Test { public volatile int inc = 0; public void increase() { inc++; } public static void main(String[] args) { final Test test = new Test(); for (int i = 0; i < 10; i++) { new Thread() { public void run() { for (int j = 0; j < 1000; j++) test.increase(); } }.start(); } while(Thread.activeCount()>1){ Thread.yield(); } System.out.println(test.inc); } }
执行结果如下
项目会一直运行下去,并且什么内容也不会输出
因为Thread.activeCount()的值一直会大于1。
5hashMap是线程安全的吗?为什么?currentHashMap是线程安全的吗?为什么
6多线程实现几种方式是什么? 有哪些方法可以实现线程同步?
1面试题
1你有什么优点
我觉得我所学的知识,和你们的招聘要求比较符合
2你有什么缺点
自己的阅历不够丰富
不太喜欢喝那种只会吹牛合作
3我为什么录用你
我觉得我所学的知识,和你们的招聘要求比较符合
4能不能接受加班
HR最想知道的问题是
1.遇到工作与生活的冲突时,如何权衡,如何处理。
2.对工作的态度。
3.思考问题的方式。
可以这样回答,对于加班后可以调休的情况。
加班可以调休我觉得这没什么问题,休息日也不应该就是玩,还应该学习自己感兴趣的东西。反正自己在家学习和工作也没什么区别。
5能不能接受出差
考官提出这个问题,并不是真的想问你喜不喜欢出差,工作需要时,你不喜欢出差也得出。主要是想了解你的家人,或者你的恋人对你的工作持何种态度。
可以接受出差,因为之前工作没有出差一直都没有机会去各个地方看看,而且出差可以和不同的人就流能在短时间内提升自己的工作能力。对于家人,我是外地人,去哪儿上班都一样。对于女朋友,我现在单身。
6能不能做外包
7什么是堆什么什么是栈
堆和栈都是内存存放数据的地方,但是他们存储变量的类型不一样。
栈内存主要用来存放基本数据类型变量与引用类型变量。相较于堆,栈内存的存取速度更快,但栈的大小和周期必须确定。因此缺乏一定的灵活性
堆内存用来存放运行时创建的对象。是在运行时动态的分配内存,生存期不用提前告诉编译器,但这也导致了其存取速度缓慢。
额外说明下:常量池也是内存用来存放数据的地方,用来存放字符串常量和基本数据类型常量。
8说一下你对jvm的理解
7说一下你对sping的理解
9对分布式那一块了解吗
10简单工厂模式适合什么场景,工厂方法模式适合什么场景,什么是抽象工厂模式
1、简单工厂模式:
(1)工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
(2)客户端只知道传入工厂类的参数,对于如何创建对象并不关心。
2、工厂方法模式
(1)客户端不知道它所需要的对象的类。
(2)抽象工厂类通过其子类来指定创建哪个对象。
---------------------
作者:听说你是吴彦祖
来源:CSDN
原文:https://blog.csdn.net/qq_37221396/article/details/78361425
版权声明:本文为博主原创文章,转载请附上博文链接!
什么是抽象工厂,以及符合开闭原则的简单工厂模式这两个问题暂时不讨论。
11如何跟踪线程是否执行完毕
1:Thread类中有个方法可以查看当前线程的活跃数
2:如果线程里面的代码正常执行完,那么线程就自动结束了
如果有stop方法调用,也会自动结束
3:如果线程是在线程池中运行,那么可以直接使用已有的api查看线程池中当前活跃的线程数
以及在队列中的线程数目。
4:如果要你自己写一个跟踪线程是否执行完毕的代码怎么写
我目前只是试了下这个方法觉得可行。 可以自定义一个变量,通过这个变量的值变化就可以确定线程是否执行完毕
12单例模式的创建方式之一双检索,有什么缺陷吗
https://blog.csdn.net/lsx2017/article/details/84966812
13volatile关键字理解
https://blog.csdn.net/lsx2017/article/details/84967568

浙公网安备 33010602011771号