面经-法大大Java实习 2023.4.6
总结:(答得不是很完善的地方总结一下)接口和抽象类的共同点和区别:共同点:
不可以被实例化
可以包含抽象方法
可以有默认的实现方法
区别:
接口对类的行为进行约束,实现某接口已经拥有了的具体行为,抽象类代码复用,强调的是从属关系
接口的成员变量只能用public static final修饰且不可修改并初始化,抽象类默认是default类型,可以在子类被重新定义且重新赋值
一个类只能继承一个抽象类(单继承),可实现多个接口。
== 和 equals()方法==:
对于基本数据类型,直接比较值的大小
对于引用类型,比较对象的内存地址
equals()方法:
比较对象是否相等,即对象的内存地址是否相等,一般也分为两种情况
重写了,一般比较两个对象的成员属性是否相等
未重写,比较的该类型的对象是否相等
try-catch-finally方法
如果在catch中return了,那么finally里面的逻辑会在return之前被执行。
如果catch和finally都有return,那么catch的return会被忽略,
因为 try 语句中的 return 返回值会先被暂存 ...
leetcode-最长回文子串
题目如下:给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。
示例 2:
12输入:s = "cbbd"输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
题解如下方法一:动态规划
代码如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445class Solution { public String longestPalindrome(String s) { int len = s.length(); if(len < 2){ return s; ...
leetcode-寻找两个正序数组的中位数
题目如下:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
123输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
123输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
题解:1234567891011121314151617181920class Solution { public double findMedianSort ...
leetcode-无重复字符的最长子串
题目如下给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
123输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
123输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
1234输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
题解如下:主要用到的思想就是滑动窗口,通过HashMap集合的key值不可重复原理来判断是否遇到重复的字符。
12345678910111213141516171819class Solut ...
leetcode-两数相加
题目如下:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
123输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.
示例 2:
12输入:l1 = [0], l2 = [0]输出:[0]
示例 3:
12输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
题解如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051/** * Definition for singly-l ...
SpringBoot开发规范(二)
PO即persistant Object 持久对象: 在O/R 映射(即ORM-ObjectRelationMapping)中出现的概念,通常对应数据模型(数据库),是与数据库汇总的表想影射的java对象,最简单的PO就是对应数据库中某个表中的一条记录,多个记录则用PO的集合。PO中不应该包含任何对数据库的操作。
DO即Domain Object 领域对象: 是从现实世界中抽象出来的有形或无形的业务实体。
TO即Transfer Object数据传输对象: 不同应用程序之间传输的对象
DTO即Data Transfer Object:数据传输对象: 泛指用于展示层与服务层之间的数据传输对象
VO即value Object: 通常用于业务层之间的数据传递,和PO一样仅包含数据,但是抽象出的业务对象,可以和表对应,用new 关键字创建,GC回收
BO即Business Object 业务对象: 主要是将业务逻辑封装为一个对象,这个对象可以包含一个或多个其他对象,如一个简历中包含教育经历、工作经历、社会关系等,可以将一个教育经历对应 ...
leetcode-连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和
[TOC]
题目如下:
方法:1、动态规划推想: 若nums数组的长度为n,下标则为0~n-1,用f(i)表示以第i个数结尾的连续子数组的最大和,故有:
$$max{f(i)},0≤i≤n-1$$
思路: 求出每段以第i个数结尾的子数组的f(i),返回最大的f(i)即可
条件: 考虑nums[i]单独成一段还是加入f(i-1)这一段子数组,则可以通过判断nums[i] + f(i-1)和nums[i]的大小实现
$$f(i) = max{nums[i]+f(i-1),nums[i]}$$
代码实现:1234567891011class Solution { public int maxSubArray(int[] nums) { int pre = 0;//存储f(i - 1)的值 int maxSum = nums[0]; for(int x : nums){ pre = Math.max(x + pre, x); ...
谈谈wx和wss
了解WS和WSS WebSocket (WS)是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,能更好地节省服务器资源和带宽并达到实时通讯。
WebSocket建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大不同是:WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动的向对方发送或接收数据,就像Socket一样;WebSocket需要类似TCP的客户端和服务器端通过握手连接,连接成功后才能相互通信。
WSS(Web Socket Secure)是WebSocket的加密版本。WS一般默认是80端口,而WSS默认是443端口,大多数网站用的就是80和433端口。(在高防防护过程中,80和433端口的网站是需要备案才可以接入国内的。)
WS体现形式:TCP+WS AS WS 。
WSS体现形式:TCP+TLS+WS AS WS。
服务器网址就是 URL。
WS/WSS出现的原因 目前很多应用要求服务端有 ...
Java基础
Java基础(一)Java语言的特点:
简单易学
面向对象(封装、继承、多态)
平台无关性(Java虚拟机实现平台无关性)
支持多线程
可靠性
安全性
支持网络编程并且很方便
编译与解释并存
什么是字节码?采用字节码的好处是什么?JVM可以理解的代码就是字节码(扩展名.class文件),JVM解释器进行对字节码的解释比较慢、引入了JIT编译器,JIT属于运行时编译,当JIT编译完成第一次编译之后,热点代码和方法的字节码对应机器码会被保存下来,下次可以直接进行使用,而不需要再次被解释器进行解释。
好处:
通过字节码的方式,在一定程度上解决了传统解释性语言执行效率低的问题,同时又保留了解释型语言可移植的特点
字节码不针对某一特定机器,所以Java不需要重新编译就可以在不同的操作系统的计算机运行。
Java源码一次编写,为啥能到处运行? JVM(Java虚拟机)是关键原因。
注意:Java程序是跨平台的程序、JVM是C/C++开发的软件,不同平台下的JVM版本不一样
为什么说Java语言“编译与解释并存”?
编译型:编译型语言可以通过编译器将源代码一次性翻译 ...