java面试笔试总结(一)--亲生经历的面试题,java面试题,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();

                    }

                }

            }

        }

    }

}





View Code

执行结果



 

D:javajdkjdk1.7installpathinjava "-javaagent:D:	oolideainstallpathIntelliJ IDEA 2017.3.2libidea_rt.jar=62126:D:	oolideainstallpathIntelliJ IDEA 2017.3.2in" -Dfile.encoding=UTF-8 -classpath D:javajdkjdk1.7installpathjrelibcharsets.jar;D:javajdkjdk1.7installpathjrelibdeploy.jar;D:javajdkjdk1.7installpathjrelibextaccess-bridge-64.jar;D:javajdkjdk1.7installpathjrelibextdnsns.jar;D:javajdkjdk1.7installpathjrelibextjaccess.jar;D:javajdkjdk1.7installpathjrelibextlocaledata.jar;D:javajdkjdk1.7installpathjrelibextsunec.jar;D:javajdkjdk1.7installpathjrelibextsunjce_provider.jar;D:javajdkjdk1.7installpathjrelibextsunmscapi.jar;D:javajdkjdk1.7installpathjrelibextzipfs.jar;D:javajdkjdk1.7installpathjrelibjavaws.jar;D:javajdkjdk1.7installpathjrelibjce.jar;D:javajdkjdk1.7installpathjrelibjfr.jar;D:javajdkjdk1.7installpathjrelibjfxrt.jar;D:javajdkjdk1.7installpathjrelibjsse.jar;D:javajdkjdk1.7installpathjrelibmanagement-agent.jar;D:javajdkjdk1.7installpathjrelibplugin.jar;D:javajdkjdk1.7installpathjrelib
esources.jar;D:javajdkjdk1.7installpathjrelib
t.jar;E:javawebzijide	estout	est	est;E:javawebzijide	estlibaxis-ant.jar;E:javawebzijide	estlibaxis.jar;E:javawebzijide	estlibcglib.jar;E:javawebzijide	estlibcommons-discovery-0.2.jar;E:javawebzijide	estlibcommons-logging-1.0.4.jar;E:javawebzijide	estlibjaxrpc.jar;E:javawebzijide	estliblog4j-1.2.17.jar;E:javawebzijide	estlibjunit-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





View Code

2java笔试题2,面试也问答过

spirng的三大核心思想,并简单描述



 

1              aop即面向切面编程:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。日志,前置通知,后置通知,返回通知,异常通知,事务拦截器。

2               ioc即控制反转:容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源。

3                DI依赖注入:组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入。有属性注入和构造器注入两种方式。





View Code

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);

            }

        }

    }

}





View Code

输出结果



 

202

263

279

326

386

486

527

887

955





View Code




  1.  
  2. 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>





View Code

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);

    }

}





View Code

执行结果如下



 

项目会一直运行下去,并且什么内容也不会输出

因为Thread.activeCount()的值一直会大于1。





View Code

5hashMap是线程安全的吗?为什么?currentHashMap是线程安全的吗?为什么

6多线程实现几种方式是什么? 有哪些方法可以实现线程同步?

1面试题

1你有什么优点



 

我觉得我所学的知识,和你们的招聘要求比较符合





View Code

2你有什么缺点



 

 自己的阅历不够丰富

不太喜欢喝那种只会吹牛合作





View Code

3我为什么录用你



 

我觉得我所学的知识,和你们的招聘要求比较符合





View Code

4能不能接受加班



 

HR最想知道的问题是

1.遇到工作与生活的冲突时,如何权衡,如何处理。

2.对工作的态度。

3.思考问题的方式。

可以这样回答,对于加班后可以调休的情况。

加班可以调休我觉得这没什么问题,休息日也不应该就是玩,还应该学习自己感兴趣的东西。反正自己在家学习和工作也没什么区别。





View Code

5能不能接受出差



 

考官提出这个问题,并不是真的想问你喜不喜欢出差,工作需要时,你不喜欢出差也得出。主要是想了解你的家人,或者你的恋人对你的工作持何种态度。

可以接受出差,因为之前工作没有出差一直都没有机会去各个地方看看,而且出差可以和不同的人就流能在短时间内提升自己的工作能力。对于家人,我是外地人,去哪儿上班都一样。对于女朋友,我现在单身。





View Code

6能不能做外包

7什么是堆什么什么是栈



 

堆和栈都是内存存放数据的地方,但是他们存储变量的类型不一样。

栈内存主要用来存放基本数据类型变量与引用类型变量。相较于堆,栈内存的存取速度更快,但栈的大小和周期必须确定。因此缺乏一定的灵活性

堆内存用来存放运行时创建的对象。是在运行时动态的分配内存,生存期不用提前告诉编译器,但这也导致了其存取速度缓慢。

额外说明下:常量池也是内存用来存放数据的地方,用来存放字符串常量和基本数据类型常量。





View Code

8说一下你对jvm的理解

7说一下你对sping的理解

9对分布式那一块了解吗

10简单工厂模式适合什么场景,工厂方法模式适合什么场景,什么是抽象工厂模式



 

1、简单工厂模式:

(1)工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。

(2)客户端只知道传入工厂类的参数,对于如何创建对象并不关心。

2、工厂方法模式

(1)客户端不知道它所需要的对象的类。

(2)抽象工厂类通过其子类来指定创建哪个对象。

--------------------- 

作者:听说你是吴彦祖 

来源:CSDN 

原文:https://blog.csdn.net/qq_37221396/article/details/78361425 

版权声明:本文为博主原创文章,转载请附上博文链接!

什么是抽象工厂,以及符合开闭原则的简单工厂模式这两个问题暂时不讨论。





View Code

11如何跟踪线程是否执行完毕



 

1:Thread类中有个方法可以查看当前线程的活跃数

2:如果线程里面的代码正常执行完,那么线程就自动结束了

    如果有stop方法调用,也会自动结束

3:如果线程是在线程池中运行,那么可以直接使用已有的api查看线程池中当前活跃的线程数

以及在队列中的线程数目。

4:如果要你自己写一个跟踪线程是否执行完毕的代码怎么写

  我目前只是试了下这个方法觉得可行。 可以自定义一个变量,通过这个变量的值变化就可以确定线程是否执行完毕





View Code

12单例模式的创建方式之一双检索,有什么缺陷吗



 

https://blog.csdn.net/lsx2017/article/details/84966812





View Code

13volatile关键字理解



 

https://blog.csdn.net/lsx2017/article/details/84967568





View Code


转载:https://www.cnblogs.com/alpsong/p/10087830.html

推荐内容:
Java简历与面试
阿里面试回来,想和Java程序员谈一谈
Java多线程面试问题
java中equals,hashcode和==的区别
Java 开发岗面试知识点
Java面试题
JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
Java中的Lock与synchronized
Java面试题——中级(下)
Java入门篇(六)——类和对象

猜你喜欢

转载自blog.csdn.net/bi_zhiyi/article/details/89434862