面试一轮
3.无重复字符的最长子串
滑动窗口
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。
1234567891011121314class Solution3AAA{ public int lengthOfLongestSubstring(String s){ Map<Character,Integer> cnt = new HashMap<>(); int left = -1,res = 0,n = s.length(); for (int right = 0;right<n;right++){ if (cnt.containsKey(s.charAt(right))){ left = Math.max(left,cnt.get(s.charAt(right))); } cnt.put(s.charAt(right),right); ...
English
未读5.1
No work is insignificant. All labor that uplifts humanity has dignity and importance and should be undertaken with painstaking excellence.
cheque 支票
cherish 珍爱
chimney 烟囱
choke 窒息
cholesterol 胆固醇
5.2
The beautiful thing about learning is nobody can take it away from you.
Christian 基督徒
circuit 巡回
chilly 寒冷的
5.3
Today’s mighty oak is just yesterday’s nut, that held its ground.
clap 鼓掌
clarity 清楚的
ceremonial 礼仪的
clause 子句
claw 爪子
clerical 牧师的
cliff 悬崖
cereal 谷物
5.4
Young people have chang ...
java
未读4.1
解决智力问题
给你一个下标从 0 开始的二维整数数组 questions ,其中 questions[i] = [pointsi, brainpoweri] 。
这个数组表示一场考试里的一系列题目,你需要 按顺序 (也就是从问题 0 开始依次解决),针对每个问题选择 解决 或者 跳过 操作。解决问题 i 将让你 获得 pointsi 的分数,但是你将 无法 解决接下来的 brainpoweri 个问题(即只能跳过接下来的 brainpoweri 个问题)。如果你跳过问题 i ,你可以对下一个问题决定使用哪种操作。
比方说,给你
1questions = [[3, 2], [4, 3], [4, 4], [2, 5]]
如果问题 0 被解决了, 那么你可以获得 3 分,但你不能解决问题 1 和 2 。
如果你跳过问题 0 ,且解决问题 1 ,你将获得 4 分但是不能解决问题 2 和 3 。
请你返回这场考试里你能获得的 最高 分数。
1234567891011121314151617class Solution101{ public long mo ...
网络模型
1.网络OSI模型和TCP/IP模型分别介绍一下
OSI七层模型
为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是 OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。
每一层负责的职能都不同,如下:
应用层,负责给应用程序提供统一的接口;
表示层,负责把数据转换成兼容另一个系统能识别的格式;
会话层,负责建立、管理和终止表示层实体之间的通信会话;
传输层,负责端到端的数据传输;
网络层,负责数据的路由、转发、分片;
数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
物理层,负责在物理网络中传输数据帧;
由于 OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。
事实上,我们比较常见,也比较实用的是四层模型,即 TCP/IP 网络模型,Linux 系统正是按照这套网络模型来实现网络协议栈的。
T ...
Controller
1.写一个简单的登录接口的Controller,包含用户ID和密码字段。
123456789101112131415161718192021222324252627282930@RestController@RequestMapping("/api/auth")public class AuthController { @Autowired private UserService userService; @PostMapping("/login") public ResponseEntity<?> login(@RequestBody LoginRequest request) { User user = userService.findByUserId(request.getUserId()); if (user == null) { return ResponseEntity.status(HttpSta ...
java
未读爬楼梯
70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
按着数学来看的话,就是如果是1阶梯的话,就是1
大于等于2的有两种,是i-1+(i-2)
然后我们使用记忆数组来记忆之前算过的
然后使用递归
12345678910111213141516class Solution70A{ public int climbStairs(int n ){ int[] memo = new int[n+1]; return dfs(n,memo); } private int dfs(int i,int[] memo){ if (i<=1){ return 1; } if (memo[i]!=0){ return memo[i]; } return memo[i] ...
从整体分析这个项目
然后加入一些别的项目的通用的知识
其他项目加入的:::
亮点
身份认证与权限校验
使用令牌技术实现身份验证,用自定栏截器完成用户认证,并结合 ThreadLocal进行截器校验,保障系统安全访间。
基于Spring Boot + JWT的完整身份认证示例,包含:
JWT生成和解析工具类
认证拦截器(拦截请求验证JWT)
ThreadLocal存储当前用户信息
配置拦截器注册
简单的用户控制器示例
流程
注册:提交用户名/密码,后台保存(通常密码要哈希存储),返回注册成功信息。
登录:提交用户名/密码,校验通过后生成 JWT Token,返回给客户端。、
访问:客户端在请求头 Authorization: Bearer <token> 中携带 JWT
自定义拦截器拦截请求,验证 JWT,有效则将解析后的用户信息存入 ThreadLocal
Controller 业务方法中可直接从 ThreadLocal 取出当前用户信息
登出/过期:JWT 自带过期时间,无需服务器状态维护;或配合黑名单实现主动失效。
问题解析
1.JWT的组成
Header(头部): ...
基本介绍
JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现···
JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。
那我们的 JVM 是不认识文本文件的,所以它需要一个 编译 ,让其成为一个它会读二进制文件的 HelloWorld.class
如果 JVM 想要执行这个 .class 文件,我们需要将其装进一个 类加载器 中,它就像一个搬运工一样,会把所有的 .class 文件全部搬进 JVM 里面来。
方法区 是用于存放类似于元数据信息方面的数据的,比如类信息,常量,静态变量,编译后代码···等
类加载器将 .class 文件搬过来就是先丢到这一块上
堆 主要放了一些存储的数据,比如对象实例,数组···等,它和方法区都同属于 线程共享区域 。也就是说它们都是 线程不安全 的
栈 这是我们的代码运行空间。我们编写的每一个方法都会放到 栈 里面运行。
我 ...
内存模型
1.JVM的内存模型介绍一下
根据 JDK 8 规范,JVM 运行时内存共分为虚拟机栈、堆、元空间、程序计数器、本地方法栈五个部分。还有一部分内存叫直接内存,属于操作系统的本地内存,也是可以直接操作的。
JVM的内存结构主要分为以下几个部分:
程序计数器:可以看作是当前线程所执行的字节码的行号指示器,用于存储当前线程正在执行的 Java 方法的 JVM 指令地址。相当于指针,如果线程执行的是 Native 方法,计数器值为 null。是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域,生命周期与线程相同。
Java 虚拟机栈:每个线程都有自己独立的 Java 虚拟机栈,生命周期与线程相同。每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。可能会抛出 StackOverflowError 和 OutOfMemoryError 异常。
本地方法栈:与 Java 虚拟机栈类似,主要为虚拟机使用到的 Native 方法服务,在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。本地方法执行时也 ...
名词解释
1.ARP**
ARP(地址解析协议)用于根据 IP 地址获取对应的 MAC 地址,是主机通信前必须完成的地址解析步骤;RARP(逆地址解析协议)则相反,用于根据已知的 MAC 地址获取 IP 地址,常用于无盘工作站启动时向网络请求 IP。ARP 常见于局域网通信,RARP 已被 DHCP 等协议取代。
其中的单播和广播
2.CDN*
内容分发网络,用于将内容缓存至离用户更近的节点,提高访问速度、降低延迟。
3.CSMA
载波监听多路访问,用于以太网的介质访问控制方式,通过“监听-发送”机制减少冲突。
4.CRC*
循环冗余校验,链路层常用的差错检测机制,能发现传输过程中的数据错误。
5.CSP
内容安全策略,用于防止 XSS 等网页攻击,浏览器通过该策略限制网页资源加载来源。
6.MAC*
媒体访问控制地址,是网卡的物理地址,也指链路层控制子层,用于网络访问管理。
7.MAN
城域网,覆盖城市范围的计算机网络,规模介于局域网(LAN)和广域网(WAN)之间。
8.MTU*
最大传输单元,指网络层一次能够传输的最大数据报长度,影响分片与传输效率。
9.NAT*
网络地址转换, ...
概念
1.数组与集合区别,用过哪些?
数组和集合的区别:
数组是固定长度的数据结构,一旦创建长度就无法改变,而集合是动态长度的数据结构,可以根据需要动态增加或减少元素。
数组可以包含基本数据类型和对象,而集合只能包含对象。
数组可以直接访问元素,而集合需要通过迭代器或其他方法访问元素。
我用过的一些 Java 集合类:
ArrayList: 动态数组,实现了List接口,支持动态增长。
LinkedList: 双向链表,也实现了List接口,支持快速的插入和删除操作。
HashMap: 基于哈希表的Map实现,存储键值对,通过键快速查找值。
HashSet: 基于HashMap实现的Set集合,用于存储唯一元素。
TreeMap: 基于红黑树实现的有序Map集合,可以按照键的顺序进行排序。
LinkedHashMap: 基于哈希表和双向链表实现的Map集合,保持插入顺序或访问顺序。
PriorityQueue: 优先队列,可以按照比较器或元素的自然顺序进行排序。
2.说说Java中的集合?
List是有序的Collection,使用此接口能够精确的控制每个元素的插入位置,用户 ...