目录

1. GC root 有哪些?(华为)

2. 传统 I/O 跟 NIO 的区别?(华为)

3. KAFKA 是什么?主要应用场景有哪些?(腾讯)

4. MYSQL 索引分类?(腾讯)

5. 了解线程 & 进程的区别吗?(腾讯)

6. 常见分布式锁的几种实现方式?(腾讯)

7. 信号量与信号的区别?(腾讯)

8. 场景题:1 亿个数据取出最大前 100 个有什么方法?(腾讯)

9. 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?(腾讯)

10. 谈谈你对 SQL 注入式攻击的理解?(腾讯)

11. CI 服务有什么用途?(腾讯)


1. GC root 有哪些?(华为)

• Thread-存活的线程。

• Java虚拟机栈中的引用的对象。

• 方法区中的类静态属性引用的对象。(一般指被static修饰的对象,加载类的时候就加 载到内存中。)
• 方法区中的常量引用的对象。本地方法栈中的JNI( native方法)引用的对象。Monitor Used-用于同步监控的对象。


2. 传统 I/O 跟 NIO 的区别?(华为)

所有I/O都被视为单个的字节的移动,通过一个称为Stream的对象一次移动一个字节。 流1/。用于与外部世界接触。它也在内部使用,用于将对象转换为字节,然后再转换回对 象。传统流IO的好处是使用简单,将底层的机制都抽象成流,但缺点就是性能不足。而 且IO的各种流是阻塞的。这意味着,当一个线程调用read()或write()时,该线程被阻 塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。原来的I/O库([在java.io](http://xn--java-ft4g.io/).*中)与NIO最重要的区别是数据打包和传输的方式。原来的 I/O以流的方式处理数据,而NIO以块的方式处理数据。NIO性能的优势就来源于缓冲的机制(buffer机制),不管是读或者写都需要以块的形 式写入到缓冲区中。NIO实际上让我们对IO的操作更接近于操作系统的实际过程。NIO作为非阻塞式的IO,它的优点就在于
1、它由一个专门的线程去处理所有的IO 事件,并负责分发;
2、事件驱动,只有事件到了才会触发,而不是同步的监听这个事件;
3、线程之间通过wait,notify等方式通讯。保证每次上下文切换都是有意义的。减少无谓 的线程切换。
• 当我们在执行持续性的操作(如上传下载)时,IO的方式是要优于NIO的。分清情况, 合理选用。NIO相对于IO流的优势:非阻塞buffer机制流替代块


3. KAFKA 是什么?主要应用场景有哪些?(腾讯)

Kafka是一个分布式流式处理平台。这到底是什么意思呢?
流平台具有三个关键功能:
• 消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是Kafka也被归类为消 息队列的原因。
• 容错的持久方式存储记录消息流:Kafka会把消息持久化到磁盘,有效避免了消息丢失 的风险。
• 流式处理平台:在消息发布的时候进行处理,Kafka提供了一个完整的流式处理类库。 Kafka主要有两大应用场景:
•消息队列:建立实时流数据管道,以可靠地在系统或应用程序之间获取数据。
•数据处理:构建实时的流数据处理程序来转换或处理数据流。


4. MYSQL 索引分类?(腾讯)

单列索引
• 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值 和空值,纯粹为了查询数据更快一点。
•唯一索引:索引列中的值必须是唯一的,但是允许为空值,
• 主键索引:是一种特殊的唯一索引,不允许有空值。
组合索引:
多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使 用,使用组合索引时遵循最左前缀集合。
全文索引:
只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文 索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有"你是个靓仔,靓女..."通过靓仔,可能就可以找到该条记录
空间索引:
空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种, GEOMETRY、POINT、LINESTRING、POLYGON。在创建空间索引时,使用 SPATIAL 关 键字。要求,弓I擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。


5. 了解线程 & 进程的区别吗?(腾讯)

操作系统中可以拥有多个进程,一个进程里可以拥有多个线程,线程在进程内执行
进程和线程的区别
•容易创建新线程。创建新进程需要重复父进程
•线程可以控制同一进程的其他线程。进程无法控制兄弟进程,只能控制其子进程
•进程拥有自己的内存空间。线程使用进程的内存空间,且要和该进程的其他线程共享这个 空间;而不是在进程中给每个线程单独划分一点空间。
•(同一进程中的)线程在共享内存空间中运行,而进程在不同的内存空间中运行
• 线程可以使用wait(),notify(),notifyAll()等方法直接与其他线程(同一进程) 通信;而,进程需要使用“进程间通信”(IPC)来与操作系统中的其他进程通信。


6. 常见分布式锁的几种实现方式?(腾讯)

• 基于数据库实现分布式锁
• 基于缓存实现分布式锁
• 基于Zookeeper实现分布式锁


7. 信号量与信号的区别?(腾讯)

• 信号:(signal)是一种处理异步事件的方式。信号是比较复杂的通信方式,用于通知接 受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。
• 信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一 种设施,它负责协调各个线程,以保证它们能够正确、合理的使用公共资源。 简单地说,信号就是一种异步通信,通知进程某种事件的发生;信号量是进程/线程同步与互 斥的一种机制,保证进程/线程间之间的有序执行或对公共资源的有序访问。


8. 场景题:1 亿个数据取出最大前 100 个有什么方法?(腾讯)

•最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法 的时间复杂度一般为O (nlogn),如快速排序。

•局部淘汰法,该方法与排序方法类似,用一个容器保存前10000个数,然后将剩余的所 有数字——与容器内的最小数字相比,如果所有后续的元素都比容器内的10000个数还 小,那么容器内这个10000个数就是最大10000个数。如果某一后续元素比容器内最 小数字大,则删掉容器内最小元素,并将该元素插入容器,最后遍历完这1亿个数,得 到的结果容器中保存的数即为最终结果了。此时的时间复杂度为O (n+mN),其中m 为容器的大小,即10000。

•分治法,将1亿个数据分成100份,每份100万个数据,找到每份数据中最大的 10000个,最后在剩下的10010000个数据里面找出最大的10000个。如果100 万数据选择足够理想,那么可以过滤掉1亿数据里面99%的数据。100万个数据里面 查找最大的10000个数据的方法如下:用快速排序的方法,将数据分为2堆,如果大 的那堆个数N大于10000个,继续对大堆快速排序一次分成2堆,如果大的那堆个 数N大于10000个,继续对大堆快速排序一次分成2堆,如果大堆个数N小于 10000个,就在小的那堆里面快速排序一次,找第10000-n大的数字;递归以上过程, 就可以找到第1w大的数。参考上面的找出第1w大数字,就可以类似的方法找到前 10000大数字了。此种方法需要每次的内存空间为10A64=4MB, —共需要101次这 样的比较。

• Hash法,如果这1亿个书里面有很多重复的数,先通过Hash法,把这1亿个数字 去重复,这样如果重复率很高的话,会减少很大的内存用量,从而缩小运算空间,然后通 过分治法或最小堆法查找最大的10000个数。

• 采用最小堆法,首先读入前10000个数来创建大小为10000的最小堆,建堆的时间复 杂度为0(mlogm)(m为数组的大小即为10000),然后遍历后续的数字,并于堆 顶(最小)数字进行比较。如果比最小的数小,则继续读取后续数字;如果比堆顶数字大, 则替换堆顶元素并重新调整堆为最小堆。整个过程直至1亿个数全部遍历完为止。然后 按照中序遍历的方式输出当前堆中的所有10000个数字。该算法的时间复杂度为O (nmlogm),空间复杂度是10000 (常数)。


9. 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?(腾讯)

悲观锁:
总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会 上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多 这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里 面的同步原语synchronized关键字的实现也是悲观锁。

乐观锁:
顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更 新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适 用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制, 其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是 使用了乐观锁的一种实现方式CAS实现的。


10. 谈谈你对 SQL 注入式攻击的理解?(腾讯)

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的 查询字符串,欺骗服务器执行恶意的SQL命令。
如何防范SQL注入式攻击?
在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内 容可以按多种方式进行。
• 对于动态构造SQL查询的场合
a. 替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。
b. 删除用户输入内容中的所有连字符
c. 对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、 删除操作。
• 用存储过程来执行所有的查询。
• 限制表单或查询字符串输入的长度。
• 检查用户输入的合法性。
• 将用户登录名称、密码等数据加密保存。
• 检查提取数据的查询所返回的记录数量。


11. CI 服务有什么用途?(腾讯)

CI (Continuous Integration)-- 持续集成服务 -- 主要用于整合团队开发 中不同开发者提交到开发仓库中的项目代码变化,并即时整合编译,检查整合 编译错误的服务。它需要一天中多次整合编译代码的能力,若出现整合错误, 可以优异地准确定位提交错误源。


参考:
链接:https://leetcode.cn/leetbook/read/da-han-hou-duan-gang-ti-mu-he-ji-shang/nir7kj/

leetcode java 大厂基础面试题附答案(二)相关推荐

  1. leetcode java 大厂基础面试题附答案(四)

    目录 1. 说一下泛型原理,并举例说明.(京东) 2. 讲下 Kafka.RabbitMQ.RocketMQ 之间的区别是什么?(京东) 3. 介绍下 MySQL 聚簇索引与非聚簇索引的区别(Inno ...

  2. Word计算机与网络应用原题,计算机应用基础考试试题附答案

    计算机应用基础考试试题附答案 计算机应用普及到社会经济更多的领域.第三代集成电路计算机具有良好的性能价格比和可靠性,它促进了计算机的推广应用.下面是小编为大家整理的计算机应用基础考试试题附答案,欢迎参 ...

  3. Java计算机考试_2017年Java计算机考试模拟试题附答案

    2017年Java计算机考试模拟试题附答案 仁者不忧,知者不惑,勇者不惧.三人行,必有我师焉;择其善者而从之,其不善者而改之.以下是小编为大家搜索整理的2017年Java计算机考试模拟试题附答案,希望 ...

  4. 列举Java高并发面试题附答案解析

    Java高并发面试题是程序员面试过程中的必修课,只有熟练掌握这些技术要点,在我们的学习中才会脱颖而出,在这里,达内石家庄Java培训老师作深入解答. Java并发面试题附答案 1. 什么是原子操作在J ...

  5. java高并发面试题目_列举Java高并发面试题附答案解析

    Java高并发面试题是程序员面试过程中的必修课,只有熟练掌握这些技术要点,在我们的学习中才会脱颖而出,在这里,达内石家庄Java培训老师作深入解答. Java并发面试题附答案 1. 什么是原子操作?在 ...

  6. 一份超详细的IBM公司JAVA基础面试题附答案以及解析(题库)

    第一章 Java概述 笔试题 一.填空题 1.[基础题]Java是一种先 编译 后 解释 运行的语言. 二.选择题 三.名词解释 1.[基础题]J2SE:Java 2 Standard Edition ...

  7. 计算机基础知识试题及答案(二),计算机基础知识试题以及答案(二)

    大学计算机基础考试试题 计算机基础知识试题(三) 一. 选择题 1.文件型病毒主要传染对象的文件类型是 A. . DBF . B. . BAS C.. PRG D.. COM和. EXE 2.第一台以 ...

  8. 冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)

    前言 大家好,我是程序员manor,上次货拉拉面试太打击心情,于是我决定找些小boss打打让自己愉悦起来,于是就有了下面

  9. JAVA大厂高频面试题及答案

    Spring概述(10) 什么是spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题.它是一个分层的 ...

最新文章

  1. FreeSwitch Sip【转】
  2. Java学习笔记(一)--JDK环境
  3. CRM campaign relationship read
  4. iphone文件怎么上传到服务器,iPhone编程中文件上传到HTTP服务器
  5. iphone 2x 3x_iPhone X的未来:从现实到荒诞
  6. python设计模式8-组合模式
  7. 循序渐进之Maven(4) - 第一个SpringMVC项目
  8. javascript 跳转页面写法
  9. android Audio调试程序常用命令
  10. java零基础对象和类_【JAVA零基础入门系列】Day11 Java中的类和对象
  11. 全国DNS服务器IP地址大全、公共DNS大全
  12. 网易云音乐mp3外链、真实地址下载方法
  13. 深度学习那么火,深度学习图形工作站应该更火。最新配置推荐。
  14. 如何提高研发部门工作效率的探讨
  15. java 微信给好友发信息吗,不在线,好友发给我的微信消息,会不会丢?
  16. CDH集群搭建(CDH 6.0.1)
  17. 常成员函数函数和返回值为常量的函数
  18. Laravel 教程:使用Fast Excel解决导出超大 XLSX 文件(千万级)带来的内存问题
  19. 封装一个常用的js工具类
  20. C语言中void cpy,关于C/C++ void指针,使用void指针拷贝int 数组

热门文章

  1. GICv3软件overview手册之GICv4对虚拟LPI的直接注入(2)
  2. 数据结构资源视频地址
  3. 运行时异常和受检查异常的区别
  4. Notification的功能与使用案例
  5. dirbuster暴力破解工具
  6. QT tableview内置控件
  7. 博文推荐|深入解析 BookKeeper 多副本协议(一)
  8. 突破单点瓶颈、挑战海量离线任务,Apache Dolphinscheduler在生鲜电商领域的落地实践
  9. setTimeout/setIntervel 的类型定义
  10. PARWAN处理器架构特点