最新Java面试300题:腾讯T4面试+美团+京东+拼多多(文末答案附赠)

网络编程

=======================================================================================================================================================================================================

  1. ISO模型与协议

  2. http1.0:需要使用keep-alive参数来告知服务器端要建立一个长连接

  3. http1.1:默认长连接。支持只发送header信息,可以用作权限请求。支持Host域。

  4. http2.0:多路复用的技术,做到同一个连接并发处理多个请求。HTTP2.0使用HPACK算法对header的数据进行压缩。支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

  5. 会话层:负责管理主机之间的会话进程,负责建立、管理、终止进程之间的会话。

  6. 传输层:将上层数据分段并提供端到端的、可靠的或不可靠的传输,还要处理端到端的差错控制和流量控制问题。协议TCP、UDP、SPX

  7. 网络层:对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。协议IP、IPX、RIP、OSPF

  8. 数据链路层:在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。协议SDLC、HDLC、PPP、STP、帧中继

  9. TCP\IP模型与协议

  10. 应用层:单位是数据段,协议有FTP、TELNET、HTTP、SMTP、SNMP、TFTP、NTP、DNS

  11. 运输层:单位是数据包,协议有TCP、UDP

  12. 网络层:单位是数据帧,协议有IP

  13. 网络接口层:单位是比特,ARP、RARP

  14. 三次握手与四次挥手

  15. BIO NIO AIO

  16. BIO:同步阻塞IO,每个请求都要一个线程来处理。

  17. NIO:同步非阻塞IO,一个线程可以处理多个请求,适用于短连接、小数据。

  18. AIO:异步非阻塞IO,一个线程处理多个请求,使用回调函数实现,适用于长连接、大数据。

  19. DDOS攻击原理与防御方式

  20. HTTP Get Flood:发送大量会产生sql查询的连接,使得数据库负载很高。

  21. CSRF跨站请求伪造原理攻击者盗用了你的身份,以你的名义发送恶意请求。

  22. CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

  23. 防御方式:1.验证码;2. 后台生成token,让前端请求携带。3.使用对称加密,后端随机给前端一个密钥,前端进行加密,后端解密。

  24. 会话劫持通过暴力破解、 预测、窃取(通过XSS攻击)等方式获取到用户session

  25. XSS攻击XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌。

  26. XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

  27. XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛等社交网站上,但OA系统,和CRM系统上也能看到它身影,比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞,黑客提交了恶意攻击代码,当系统管理员查看投诉信息时恶意代码执行,窃取了客户的资料,然而管理员毫不知情,这就是典型的XSS存储型攻击。

  • 解决方法

  • 在表单提交或者url参数传递前,对需要的参数进行过滤

  • 过滤用户输入。检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等

28.RPC与HTTP服务的区别

多线程

===

  1. synchronized、CAS

  2. Collections

  3. 支持高并发的数据结构,如ConcurrentHashMap

  4. 基于AQS实现的锁、信号量、计数器原理

  5. Runnable与Callable的区别

  6. 线程池

  7. 作用

  • 减少在创建和销毁线程上所花的时间以及系统资源的开销 。

  • 当前任务与主线程隔离,能实现和主线程的异步执行,特别是很多可以分开重复执行的任务。

8.阻塞队列

9.threadlocal

Spring框架

============

  1. IOC/DI

  2. Core、Beans、Context、Expression Language

  3. JDBC、ORM、OXM、JMS、Transaction

  4. AOP

  5. Web

  6. Test

  7. @Autowired原理

  8. 工厂模式

  9. 反射

  10. 自动配置@ConfigurationProperties(prefix = “hello”):读取以hello为开头的配置,属性类使用

  11. @Configuration:指名当前类为配置类

  12. @EnableConfigurationProperties(Properties):指名配置属性类

  13. @ConditionalOnClass(Condition.class):条件类,只有Condition.class存在,当前配置类才生效

  14. Spring Boot在spring.factories配置了很多全限定名的配置类。

Redis

=========

核心原理

  1. 常用数据类型String:二进制安全,可以存任何数据,比如序列化的图片。最大长度位512M.

  2. Hash:是KV对集合,本质是String类型的KV映射,适合存储对象。

  3. List:简单字符串链表,可以在left、right两边插入,本质是双向链表。缓冲区也是用这个实现。

  4. Set:String类型的无序集合,内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

  5. zset:有序集合,每个元素会关联一个double类型的score,然后根据score进行排序。注意:元素不能重复,但是score是可以重复的。使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score.

  • pub/sub:在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。

持久化

  1. RDB:一种是手动执行持久化命令来持久化快照;另一种是在配置文件中配置策略,来自动持久化。持久化命令有save、bgsave两种,bgsave会调用fork命令,产生子进程来进行持久化,而父进程继续处理数据,但是持久化的快照是fork那一刻的快照,因此这种策略可能会丢失一部分数据。特点:每次都记录所有数据,恢复快,子进程不影响父进程性能。

  2. AOF:append only file,将每条操作命令都记录到appendonly.aof文件中,但是不会立马写入硬盘,我们可以配置always(每有一个命令,都同步)、everysec(每秒同步一次)、no(没30秒同步一次)。往往everysec就够了。aof数据损失要比RDB小。特点:有序记录所有操作,数据丢失更少,会对操作做压缩优化,bgrewriteaof也会fork子进程,不影响父进程性能

事务

  1. Transactions:不是严格的ACID的事务,但是这个Transactions还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。

  2. Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行。

KafKA

=========

  1. topic

  2. broker

  3. partition

  4. consumer

  5. producer

  6. stream

  7. 存储机制

  8. 网络模型

  9. 注意:partition之间是无序的

  10. 消息队列的生产者消费者中消费者没有收到消息怎么办,消息有顺序比如1.2.3但是收到的却是1.3.2怎么办?消息发过来的过程中损坏或者出错怎么办

Spring security

===================

  1. 拦截器栈

  2. @PreAuthorize

  3. @PostAuthorize

  4. 支持Expression Language

jvm原理

=========

内存模型、垃圾收集器、CMS与G1是重点

垃圾收集算法

  • 标记-清除(CMS)容易产生碎片,当碎片太多会提前触发Full GC

  • 复制(年轻代基本用这个算法)会浪费一半的可能感觉

  • 标记-整理(serial Old、Parallel Old)

  • Serial:采用单线程stop-the-world的方式进行收集。当内存不足时,串行GC设置停顿标识,待所有线程都进入安全点(Safepoint)时,应用线程暂停,串行GC开始工作,采用单线程方式回收空间并整理内存。串行收集器特别适合堆内存不高、单核甚至双核CPU的场合。

  • ParNew

  • Parallel Scavenge

CMS

  • 初始标记(stop of world)

  • 并行标记、预清理

  • 重新标记(stop of world)

  • 并行清理

G1

将堆分成很多region,可以同时堆年轻代与老年代进行收集

  • 初始标记(stop of world):初始标记(Initial Mark)负责标记所有能被直接可达的根对象(原生栈对象、全局对象、JNI对象)

  • 并行标记:

  • 重新标记(stop of world):

  • 清理(stop of world):

  • 重置

gc触发条件

  1. 从年轻代分区拷贝存活对象时,无法找到可用的空闲分区,会触发Minor GC

  2. 从老年代分区转移存活对象时,无法找到可用的空闲分区,会触发Major GC

  3. 分配巨型对象时在老年代无法找到足够的连续分区,会触发Major GC

  4. 可达性分析:通过检查一块内存空间能否被root达到,来判断是否对其进行回收。

jdk不同版本新增的部分特性

jvm调优

  • VisualVM:JDK自带JVM可视化工具,能过对内存、gc、cpu、thread、class、变量等等信息进行可视化。

设计模式

====

  1. 单例双重检查

  2. 观察者模式

  3. 装饰者模式:jdk中输入输出流用到了该模式

  4. 适配器模式:jdk中Reader、writer用到了该模式

  5. 代理模式

  6. 静态代理

  7. JDK动态代理

  8. Cglib到动态代理

  9. 生产者消费者模式

  10. 工厂模式

项目管理与运维工具

=========

  1. git+Jenkins

  2. maven

  3. K8Spod:Pod是所有业务类型的基础,所有的容器均在Pod中运行,它是一个或多个容器的组合。每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址和网络端口。Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享数据。

  4. kubelet:kubelet负责管理pods和它们上面的容器,images镜像、volumes、etc。

  5. ingress,用于负载均衡

  6. docker

  7. docker与虚拟机的区别

数据结构

====

  1. 平衡二叉树AVL

  2. 高度log(n)

  3. 插入时间复杂度log(n)

  4. 红黑树

  5. 插入时间复杂度log(n)

  6. 查找时间复杂度log(n)

  7. 在查找是,红黑树虽然复杂度也是log(n),但是从效率上比要略低于AVL。但是其优势在于插入元素的时候,不会像AVL那样频繁地旋转。

  8. B+Tree:只有叶子节点存值,非叶子节点只存key和child,因此同样大小的物理页上能存放更多的节点。每一层的节点数量越多,意味着层次越少,也就意味着IO次数越少,因此非常适合数据库以及文件系统。

  9. 大根堆:采用数组存储树,是一个完全树。先插入到数组最后的位置上,然后采用上浮的思想,将该元素与比它小的父元素调换,直到parent>target,浮到root;然后将root与未排序的最后一个元素交换位置;重复以上步骤,直到所有元素都有序。插入如查找的复杂度都是log(n)。

  10. 优先队列PriorityQueue,Java中使用小根堆实现,非线程安全。

  11. 优先阻塞队列PriorityBlockQueue,线程安全。

算法

==

  1. 快排

  2. 时间复杂度O(nlog(n))

  3. 空间复杂度O(log(n))

  4. 堆排序

  5. 时间复杂度O(nlog(n))

  6. 空间复杂度O(1)

  7. 归并排序

  8. 时间复杂度O(nlog(n))

  9. 空间复杂度O(n)

  10. 跳表时间复杂度O(log(n))

  11. 空间复杂度O(2n)

  12. 高度O(log(n))

分布式

===

cap理论

  1. 可用性

  2. 一致性

  3. 分区容忍性:对网络断开的容忍度,有点像鲁棒性

  4. 拜占庭将军问题

Raft 算法

  • 有leader、follower、candidate

同步流程

  1. 由客户端提交数据到Leader节点。

  2. 由Leader节点把数据复制到集群内所有的Follower节点。如果一次复制失败,会不断进行重试。

  3. Follower节点们接收到复制的数据,会反馈给Leader节点。

  4. 如果Leader节点接收到超过半数的Follower反馈,表明复制成功。于是提交自己的数据,并通知客户端数据提交成功。

  5. 由Leader节点通知集群内所有的Follower节点提交数据,从而完成数据同步流程。

zookeeper

  1. Zab(Zookeeper Atomic Broadcast)协议,有两种模式:
  • 它们分别是:恢复模式(选主)和广播模式(同步)。

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

,会不断进行重试。

  1. Follower节点们接收到复制的数据,会反馈给Leader节点。

  2. 如果Leader节点接收到超过半数的Follower反馈,表明复制成功。于是提交自己的数据,并通知客户端数据提交成功。

  3. 由Leader节点通知集群内所有的Follower节点提交数据,从而完成数据同步流程。

zookeeper

  1. Zab(Zookeeper Atomic Broadcast)协议,有两种模式:
  • 它们分别是:恢复模式(选主)和广播模式(同步)。

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中…(img-C4UZyENB-1714727091336)]

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧农业是目前物联网技术应用的一个非常典型的领域,例如利用STM32F103ZE单片机作为智能物联网控制节点,以及通过ESP8266实现WiFi通信模块,这些都是农业物联网的应用案例之一。同时,借助云计算技术和物联网平台能够让农业从传统的农业向数字化的农业转型,让农业更加高效和智能。 STM32F103ZE是一款高性能、低功耗的单片机芯片,具备强大的计算、控制和通信能力。它可以实现图片处理、获取传感器数据、数据存储等各种功能,同时还可以支持WiFi、蓝牙、红外、ZigBee等不同通信方式。这使得STM32F103ZE非常适合作为智能物联网控制节点。 另外,ESP8266是一款WiFi通信模块,可以轻松实现STM32F103ZE与物联网平台的网络连接。应用ESP8266通信模块,使得节点与云平台之间的数据传递更加高效、灵活,且实现一系列远程监控、控制等功能。 物联网平台则是整个物联网系统的核心,它以数据处理、存储、分析、展示等核心功能,实现了物联网系统的统一管理。腾讯云物联网平台是一款业界领先的物联网平台软件,它可以快速的实现系统的构建,包括节点与云平台的连接管理、数据获取、数据存储、数据转发等功能。 以上三种技术的应用,使得智慧农业系统可以实现对温度、湿度等参数的无线采集,通过数据传输技术将这些数据传送至物联网平台,从而实现对农场的实时监测、远程控制等一系列智能化措施。这不仅可以提高农业的生产效率和经济效益,还可以严格控制农业生态环境的质量,促进农业与科技的深度融合和升级。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值