牛客网面试题

技术牛客网面试题 牛客网面试题目录
一、JAVA
二、计算机网络
三、操作系统
四、项目
五、数据库
第六部分 框架
第七部分 设计模式
第八部分 数据结构和算法
第九部分 Linux
########

牛旺面试问题

目录

一、JAVA

二、计算机网络

三、操作系统

四、项目

五、数据库

第六部分 框架

第七部分 设计模式

第八部分 数据结构和算法

第九部分 Linux

################################################################################################################################

第一部分 JAVA

JVM

谈谈JVM的内存模型。

Java8中的JVM运行时数据区

说一下 Java 方法执行的过程,说详细一点。编译、加载(类加载)、执行解释

Java 8的新特性

怎么调整堆的大小要修改哪个参数

你知道信号驱动IO和多路复用IO吗?

字符串s=新字符串(' ABC ');运行代码后,您在内存中存储了什么?变量S在哪里?

String str=新字符串(' ABC ');

字符串str=' abc

/*

第一种是用new()创建一个对象,它将存储在堆中,每次调用它时都会创建一个新对象。

第二种方法是先在栈中为String类创建一个对象引用变量str,然后找出栈中是否有‘ABC’。如果没有,将“abc”放入堆栈,并使str指向“abc”。如果有“abc”,请直接将字符串指向“abc”。

比较类中的值是否相等时,请使用equals()方法;当测试两个包装类的引用是否指向同一个对象时,使用==

*/

内存溢出的可能原因是什么?

类型:频繁内存泄漏、偶尔内存泄漏、一次性内存泄漏和隐式内存泄漏。

1.内存中加载的数据量太大,比如一次从数据库中取出的数据太多;

2.集合类中有对对象的引用,使用后不清空,使JVM无法回收;

3.代码或对象实体中存在无限循环,循环导致重复次数过多;

4.使用的第三方软件中的Bugs

5.启动参数的内存值设置得太小。

什么样的物品不能回收?如何决定物品是否可以回收?

1.引用计数法:引用与对象相关。如果要操作对象,必须使用引用。如果没有与之关联的引用,则可以回收该对象。

2.可达性分析:解决引用计数法的循环引用问题;如果“GC根”和一个对象之间没有可达路径,则称该对象不可达;无法接近的物体必须经过至少两个标记过程才能成为可回收的物体。

Java中的类加载过程是加载、验证、准备、解析和初始化。

父母分配模型有什么机制可以打破双亲委派模型

JAVA集合

谈谈数组列表和链表的区别:数组和链表的区别——查找和修改插入。

Hashmap扩展机制,为什么HashMap在定义一个大小HashMap的时候一般会初始化它的底层原理?HashMap线程安全吗?为什么Java中Hashmap的扩展因子是0.75?

说说ConcurrentHashMap

LinkedHashmap是如何实现的?

Java 的集合常用什么一般在什么场景下用到

JAVA线程和多线程

谈谈Java中线程的六种状态及其转换。

1.**初始(新)**:已创建新的线程对象,但尚未调用start()方法。

2.**正在运行* *:在Java线程中,就绪和运行状态一般称为“正在运行”。

创建线程后,其他线程(如主线程)调用对象的start()方法。处于这种状态的线程位于可运行线程池中,等待被线程调度选中获得CPU使用权,现在处于就绪状态。处于就绪状态的线程在获得CPU时间片后开始运行。

3.**阻塞* *:表示线程在锁中被阻塞。

4.**等待

**:进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
5. **超时等待(TIMED_WAITING)**:该状态不同于WAITING,它可以在指定的时间后自行返回。
6. **终止(TERMINATED)**:表示该线程已经执行完毕。

  • 讲一下Java里面的线程安全、概念、如何实现写一个两个线程死锁的案例,或者表述一下

  • volatile关键字的作用什么场景下会使用volatile举个实际的场景volatile 的底层实现,如何防止指令重排线程,有哪些状态,说一下,并且说一下这些状态之间如何转移。

  • 线程池用过吗说一下四种常用线程池。如果让你实现具有缓存功能的线程池的类怎么实现

    - CachedThreadPool:创建一个可根据需要创建新线程的线程池
    - FixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程
    - ScheduledThreadPool:创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行
    - SingleThreadExecutor:返回一个线程池(这个线程池只有一个线程),这个线程池可以在线程死后(或发生异常时)重新启动一个线程来替代原来的线程继续执行下去
    
  • sleep和wait有什么区别run()和start()方法的区别

    1. 对sleep()方法属于 Thread 类中的。而 wait()方法属于Object 类中的
    2. sleep()方法导致了程序暂停执行指定的时间,让出 cpu 该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
    3. 在调用 sleep()方法的过程中,线程不会释放对象锁。
    4. 而当调用 wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用 notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
    1. start()方法来启动线程,真正实现了多线程运行。这时无需等待 run 方法体代码执行完毕,可以直接继续执行下面的代码。
    2. 通过调用 Thread 类的 start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。
    3. 方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了运行状态,开始运行 run 函数当中的代码。 Run 方法运行结束, 此线程终止。然后 CPU 再调度其它线程。
    
  • Callable()和Future用过吗****使用Callable()创建线程比另外两种方式有什么优势吗

  • volatile int a=1,写一个方法对a进行累加,这个方法是有多个线程去访问的,这样实现能保证线程安全吗详细讲下为什么两个线程同时访问不能保证线程安全(如果线程安全a应该为3,但是线程不安全就不会是3)

  • 有一个文件,有很多人在读。并发读,没有影响,但是当一个人在写入文件时,不允许其他人写入,如果已经在写这个文件时,是不允许读,因为在修改过程中读的不是最新的,如果有人读的情况下,不希望有人能写,如果要实现这个功能,代码应该怎么去实现,去做多线程的控制

  • new一个线程放在哪里

  • 线程之间的通信方式

    1.volatile和synchronized关键字
    2.等待/通知机制:
    //指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或者notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续操作
    //经典范例:生产者、消费者
    3.管道输入/输出流:
    //用于线程之间的数据传输,而传输的媒介为内存
    //种具体实现:PipedOutputStream、PipedInputStream、PipedReader和PipedWriter,前两种面向字节,而后两种面向字符
    4.Thread.join()
    //理解成是线程合并,当在一个线程调用另一个线程的join方法时,当前线程阻塞等待被调用join方法的线程执行完毕才能继续执行
    5.ThreadLocal:
    //ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构
    //将当前线程和一个map绑定,在当前线程内可以任意存取数据,减省了方法调用间参数的传递
    //更像是一个线程内部的通信
    
  • JAVA基础知识

    1. 说下hashCode( )什么场景下会重写hashCode()

      HashCode()方法和equals()方法的作用其实一样,都是比较两个对象是否相等
          1.重写的equals()一般比较全面比较复杂,这样效率就比较低,而利用HashCode()进行双向对比,则只要生成一个hash值就可以进行比较,效率较高。
          2.HashCode()不完全可靠:equals()相等的对象肯定相等,HashCode相等的对象不一定相等,不相等的对象一定不相等。
      不重写:不重写的HashCode比较的是地址值,对于引用数据类型不能比较。所以必须重写。
      重写:1.HashTable、HashMap、HashSet 2.重写了equals就一定要重写HashCode
      
    2. 在开发过程中用过到Java的反射吗你对Java反射的理解在Java命名规范中一般采用驼峰命名的方式,假设想基于反射做一件事,有一个包,包里面有很多类,找出命名不符合规范的类名、方法 名、属性名,怎么实现

    3. 写一个Java类,属性中可能是一个类对象,怎么解决一层一层往下扫的问题(属性是一个类,类中又有属性)

    4. 序列化反序列化什么情况下会使用序列化

    第二部分 计算机网络

    1. Https和Http的区别
    2. ssl证书如果验证失败会有哪些原因呢
    3. 访问一个网址时域名解析成ip的过程
    4. 怎么处理跨域问题
    5. TCP3次握手,4次挥手为什么要3次握手不是4次,5次为什么要4次挥手

    第三部分 操作系统

    1. 什么场景下会出现死锁怎么避免死锁

    第四部分 项目

    1. 你写的项目中,数据库中设计了几张表
    2. 表中有没有用索引索引是怎么设计的
    3. 项目中哪个模块比较复杂技术难点
    4. 使用Redis做缓存,缓存中的数据是怎么来的
    5. 项目优化前QPS多少,优化后QPS多少
    6. 用什么工具做的测试在什么环境下部署的,做的压测Jmeter是在哪里执行的压测时本地的配置是怎么的做性能压测在环境部署上要考虑哪些点
    7. 当并发量比较大时,先查 redis 中的缓存, redis 中没有就去查mysql,并发量大时会不会出现穿透
    8. 当并发量比较大时,面对缓存穿透问题,对于缓存空置这种解决方法,并发量大时,可能请求都直接穿透到DB中,有没有时序问题
    9. 大致说下加锁的解决办法如果部署到多机,怎么解决加锁问题分布式锁有没有了解过
    10. MySQL中执行SQL查询语句,mysql的server层的执行流程

    第五部分 数据库

    Redis

    1. redis 的基本数据类型和底层实现,Reids的String类型的底层实现
    2. Redis有哪些应用场景你用Redis有哪些场景使用的是哪些数据结构
    3. 如何保证缓存与数据库双写的一致性这种方法有没有存在什么问题
    4. Redis怎么实现分布式锁

    MySQL

    1. 乐观锁和悲观锁知道吗乐观锁和悲观锁的优缺点和应用场景是什么
    2. 数据库是怎么使用索引的底层实现
    3. Innodb 的索引数据结构,回表机制,和 mysiam 的区别
    4. 事务的 ACID 特性,事务隔离级别,解决什么问题
    5. 对数据库事务是怎么理解的数据库事务的隔离级别分别介绍下这几种事务的隔离级别的使用场景或存在的问题
    6. 脏读和幻读的区别什么情况下会出现幻读
    7. MySQL的隔离级别

    题目

    1. SQL:表A和表B,如果同时插入一条数据,如果要保证事务的一致性,要么同时成功,要么同时失败,代码在JDBC中应该怎么写
    2. SQL:有一张学生课程表,里面记录学生各门课程的分数,用一条SQL将每门课程的分数都大于80分,将这些学生都找出来

    第六部分 框架

    Spring

    1. Spring中AOP是怎么实现的
    2. Spring中Bean的初始化过程
    3. Spring中IOC 平时自己写代码时有什么应用场景吗
    4. 说一下工厂模式及使用场景

    第七部分 设计模式

    1. 设计模式:观察者模式
    2. Java中常用的设计模式

    第八部分 数据结构和算法

    数据结构

    1. 树结构的好处是什么,平时有用到哪些,bst 和 avl 树有什么区别
    2. 尝试实现下字典树的数据结构并且尝试建立一个字典树。

    算法

    1. 求无向图中的连通分量
    2. 判断二叉树是否是 bst
    3. 海量数据 ,查找重复单词
    4. 三个线程交替打印1、2、3,直到100。
    5. 除了B+树查找 算法 ,还了解其他的查找 算法 吗

    第九部分 Linux

    1. 用Linux命令统计一个文件中某个单词出现的次数
    2. 用Linux命令查看当前有哪些进程在活跃呢
    3. 用Linux查看文件有哪些命令
    4. less和more知道吗

    内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153032.html

    (0)

    相关推荐

    • 多分类任务中不同隐藏层层数对实验结果的影响

      技术多分类任务中不同隐藏层层数对实验结果的影响 多分类任务中不同隐藏层层数对实验结果的影响1 导入实验所需要的包 import torch
      import torch.nn as nn
      import nu

      礼包 2021年11月5日
    • C语言是怎样输出唯一的子串

      技术C语言是怎样输出唯一的子串C语言是怎样输出唯一的子串,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 题目描述给一个字符串,求长度为m的所有不重复的子

      攻略 2021年12月8日
    • Burp+夜神模拟器抓包

      技术Burp+夜神模拟器抓包 Burp+夜神模拟器抓包Burp+夜神模拟器抓包
      0X00-引言知己知彼,将心比心。
      酒逢知己饮,诗向会人吟。
      相识满天下,知己能几人。
      相逢好似初相识,到老终无怨恨心。

      礼包 2021年12月10日
    • JVM类加载机制是怎么样的

      技术JVM类加载机制是怎么样的本篇文章为大家展示了JVM类加载机制是怎么样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. java类加载运行过程 加载:加载字

      攻略 2021年10月23日
    • arctanx求导等于什么,arctanx的导数是什么

      技术arctanx求导等于什么,arctanx的导数是什么arctanx的导数arctanx求导等于什么:1/(1+x²)。证明:y=arctanx,x=tany,dx/dy=sec²y=tan²y+1,dy/dx=1/

      生活 2021年10月26日
    • Go语言基本数据类型有哪些

      技术Go语言基本数据类型有哪些这篇文章主要介绍“Go语言基本数据类型有哪些”,在日常操作中,相信很多人在Go语言基本数据类型有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言基本

      攻略 2021年11月4日