数据结构和算法面试常见题必考以及前端面试题
1.数据结构和算法
1.1 反转单向链表
public class Node {public int value;public Node next;
}public Node reverseList(Node head) {Node pre = null;Node next = null;while (head != null) {next = head.next;head.next = pre;pre = head;head = head.next}return pre;
}
1.2 在顺序表中插入和删除一个结点平均移动多少个结点?
在等概率的情况下,顺序表插入一个结点需要平均移动n/2个结点。删除一个结点需要平均移动(n-1)/2个结点。具体的移动次数取决于长度n和位置i,两者越近,移动的越少。
1.3 如何以递归和非递归方式实现二分查找
非递归:
private int binarySearch(int[] arr, int searchKey) {if (arr == null) {return -1;}int n = arr.length;int left = 0;int right = n - 1;while (left <= right) {int mid = left + ((right -left) >> 1);if (arr[mid] > searchKey) {right = mid - 1;} else if (arr[mid] < searchKey) {left = mid + 1;} else {return mid;}}return -1;
}
递归:
private int binarySearchRecursive(int[] arr, int left, int right) {if (arr == null) {return -1;}int n = arr.length;int left = 0;int right = n -1;while (left <= right) {int mid = left + ((right - left) >> 1);if (arr[mid] > searchKey) {binarySearchRecursive(arr, left, mid - 1);} else if (arr[mid] < searchKey) {binarySearchRecursive(arr, mid + 1, right);} else {return mid;}}return -1;
}
需要注意的是,二分查找算法的时间复杂度为O(logn),最坏情况下的时间复杂度为O(logn)
1.4 求二叉树的深度
private int getDepth(Node node) {if (node == null) {return 0;}int left = getDepth(node.left);int right = getDepth(node.right);return left > right ? (left + 1) : (right + 1);
}
1.5 如何在排序的数组中,找出给定数字出现的次数
其实我的想法是通过hashmap来实现,其实也没必要在乎数组是否是排序的。时间复杂度方面,遍历整个数组,将数组元素添加到hash中,最后再查询,时间复杂度应该是O(n).
function getTimes(arr, key) {var n = arr.length;var hash = {};for (var i = 0; i < n; i ++) {var ele = arr[i];if (!hash[ele]) {hash[ele] = 1;} else {hash[ele] ++;}}if (hash[key]) {return hash[key]; } else {return -1;}
}
private static void stasTimes(int[] arr, int key) {int len = arr.length;HashMap<Integer, Integer> hash = new HashMap<Integer, Integer>();for (int i =0; i < len; i++) {if (hash.containsKey(arr[i])) {Integer val = hash.get(arr[i]) + 1;hash.put(arr[i], val);} else {hash.put(arr[i], 1);}}for (Integer hashKey: hash.keySet()) {if (hashKey.intValue() == key) {System.out.println(key + " has appeared " + hash.get(hashKey) + " times");}}}
1.6 如何把字符串中的指定字符移动到字符串的前面
private char[] moveChar(String str, char a) {char[] arr = str.toCharArray();int i = arr.length - 1;while (arr[i] != a) {i --;}for (int j = i - 1; j >= 0; j --) {if (arr[j] != a) {arr[i] = arr[j];arr[j] = a;i --;}}return arr;
}
1.7 排序算法总结
冒泡排序
public static void bubbleSort(int[] arr) {if (arr == null || arr.length == 0) {return;}for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j+1]]) {swap(arr, j+1, j);}}}
}
public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}
1.8 数组和链表的区别
- 数组必须事先定义固定的长度,链表采用动态分配内存的形式实现。
- 数组从栈中分配空间,自由度小;链表从对中分配内存,自由度大,但管理麻烦。
- 数组中的数据在内存中时顺序存储的,链表是随机存储的。
- 数组便于查询;链表便于插入删除。
1.9 什么排序元素比较次数和数组初始状态无关
选择排序
##1.10 排序算法比较
| 排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 稳定性 |
|---|---|---|---|---|---|
| 冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
| 选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 不稳定 |
| 插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
| 希尔排序 | O(nlogn) | O(nlog^2n) | O(nlog^2n) | O(1) | 不稳定 |
| 归并排序 | O(nlog(n)) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
| 快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn) | 不稳定 |
| 堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
| 计数排序 | O(n+k) | O(n+k) | O(n+k) | O(k) | 稳定 |
| 桶排序 | O(n+k) | O(n+k) | O(n^2) | O(n+k) | 稳定 |
| 基数排序 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | 稳定 |
| . |
2.面试题
2.1 百度一面
- 如何实现水平垂直居中
- Position 属性的几种区别
- 讲一下盒子模型
- BFC 怎么实现
- 如何实现左右固定,中间自适应的布局
- 用 JS 实现一个柯里化函数
- 用 JS 实现一个栈
- 实现一个 TS 类,如 Partial 、Tick
- JS 任务执行机制
- 给出一段 Promise+setTimeout 的代码,写出输出顺序
- Promise 有哪些方法
- 对 async/await 的理解
- HTTP 请求响应头有哪些
- HTTPS 的是如何进行数据加密的
2.2 字节
- redux 中间件有了解吗
- Hooks 有了解吗
- Canvas 了解吗
- 开发过程中图表组件用的是是什么,看过 Echarts 的源码吗
- 在开发过程中遇到了哪些难点
2.3 小米
一面(技术面)
基本围绕简历聊,印象比较深的有几个问题
- 1.vue 的源码是否看过,说一下比较有收获的几个点
- 2.说一下 css 的三大特性并展开说一下应用场景
- 3.说一下 CSS 七层层叠顺序
- 4.说一下从浏览器输入网址到页面渲染中间发生了什么
- 5.说下你知道的 HTTP 状态码并说出它们的出现场景
二面(技术面)
主要聊项目,技术聊的比较少,说一下印象深的问题
- 1.如何实现一个简单的单点登录
- 2.说一下关系数据库和非关系数据库的区别,并说下使用场景
- 3.说一下关系数据库外键的使用
三面(技术面)
有印象的问题
- 1.手写翻转二叉树
- 2.说下归并排序的思路和应用场景
- 3.说下你知道的设计模式及应用场景
- 4.说一下从浏览器输入网址到页面渲染中间发生了什么
- 5.如何用缓存进行前端优化;说下浏览器缓存、DNS 缓存、nginx 缓存、服务端缓存的区别;强缓存和协商缓存的应用
四面(技术面)
项目经历为主,以及管理方面的问题,技术方面没聊,有印象的问题
- 1.如何确保项目按时交付
- 2.如何安排开发和管理的时间分配
- 3.如何体现项目价值
五面(技术加面)
感觉是专门准备了一些有深度的问题来问,有印象的有
- 1.如何进行前端性能优化
- 2.说说重绘、重排、回流
- 3.如何开启 GPU 加速,GPU 加速的作用是什么
- 4.是否了解浏览器内核相关技术
- 5.说一下 jsbridge 是如何实现的
- 6.说一下 V8 的垃圾回收机制
- 7.说一下 VUE3.0 比 VUE2.0 做了哪些改动
1、关于ES6 Proxy (2019 今日头条)
2、你觉得TypeScript 和 JavaScript有什么区别
- 语言层面
- Javascript 和 TypeScript 都是ECMAScript 的具体实现
- TypeScript 是静态类型,而JavaScript 是动态类型
- TypeScript 扩展了JavaScript 并且完全包容javascript
执行方面 - TS 需要编译
- JS 不需要编译
厂商层面 - Javascript 由Netscape 率先
TypeScript中的 type 和 instance 区别
interface User {name: string,age: number
}insterface SetUser {(name: string, age: number) : void;
}type SetUser = (name: string, age: number) => void;// 都允许扩展// interface extends typetype Name = {name: string;
}instance
- 不同点
// type 不是一个类型,它是类型别名// type 可以声明基本类型别名,联合类型,元祖等类型// 基本类型别名type Name = string// interface 可以 而type不行// interface 能够声明合并
interface User {name: string,age: number
}
interface User {sex: string
}new Error 不会终止成员运行
async / await 如果右边的方法执行出错了该怎么办 (百度一面2020)
- 方式一 使用Promise 的catch 方法捕获异常 不完善
- 方式二 在async 函数中使用try -catch 捕获异常 (推荐)
async function f() {console.log(1)await new Promise((resolve, reject) => {console.log(2)throw new Error('出错了')}).catch(err => {console.log(3)console.log('执行失败了')})console.log(4)
}
// 1234
使用 try-catch 的时候,会把容易引发异常的代码写到try 里面
async function f() {try {// await new Promise((resolve, reject) => {// // throw new Error('出错了')// resolve()// })await new Promise((resolve, reject) => {throw new Error('出错了')})console.log('正常输出')} catch (err) {// 这里用来捕获异常console.log('异常了)}
}
async function Login () {// 接口请求异常, // 用户名错误、密码错误、用户不存在、500// 前提条件: 接口把所有的异常都通过HTTp状态吗来返回// 尤其是在使用axios 请求库的时候, 它会把所有超出200- 300范围的状态码捕获try {catch (err) {}}
}
注意
- try-catch 只能捕获同步异常
- 还有async 中的await Promise异常
- try-catch 不能直接捕获Promise 调用异常
try {const p = new Promise((resolve, reject) => {throw new Error('error')fs.readFile('./login.js', (err, data) => {if (err) {reject(err)} else {resolve(data)}})})// 这样可以捕获到// p.then(data => {// console.log(data)// }).catch (err => {// console.log('手动 调用catch 捕获异常')// })
} catch (err) {console.log('失败了')
}// 没有错误
相关文章:
数据结构和算法面试常见题必考以及前端面试题
1.数据结构和算法 1.1 反转单向链表 public class Node {public int value;public Node next; }public Node reverseList(Node head) {Node pre null;Node next null;while (head ! null) {next head.next;head.next pre;pre head;head head.next}return pre; }1.2 在顺…...
一文解决Python所有报错
前言 Python是一种强大的编程语言,但是它也有一些报错,这些报错可能会让你感到困惑。本文将介绍如何解决Python中的常见报错。 首先,让我们来看看Python中最常见的报错:SyntaxError。这种报错表明你的代码中有语法错误,…...
LeetCode 1237. Find Positive Integer Solution for a Given Equation【双指针,二分,交互】
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
【C语言】结构体进阶
一、结构体 1. 结构体的声明 (1) 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。(2)结构的声明 struct tag {member-list; }variable-list;例如描述一个学生&#x…...
全志T3+FPGA国产核心板——Pango Design Suite的FPGA程序加载固化
本文主要基于紫光同创Pango Design Suite(PDS)开发软件,演示FPGA程序的加载、固化,以及程序编译等方法。适用的开发环境为Windows 7/10 64bit。 测试板卡为全志T3+Logos FPGA核心板,它是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计…...
深度学习之 imgaug (图像增强)学习笔记
深度学习之 imgaug (图像增强)前言1\. 安装和卸载2\. 示例2.1 基本使用2.2 包含常用的变换示例3 Augmenters常用函数3.1 iaa.Sequential()3.2 iaa.someOf()3.3 iaa.OneOf()3.4 iaa.Sometimes()3.5 iaa.WithColorspace()3.6 iaa.WithChannels()3.7 iaa.No…...
mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
一、事故还原 我们仍然使用学生信息表,但是我们只需要保留两个字段即可: CREATE TABLE student_info (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,name varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT 姓名, PRIMARY KEY (id) ) ENGINEIn…...
一个关于事件溯源Event Sourcing的小荔枝,Golang实现
最后更新于2023年3月1日 10:23:13 参考的这个文章:https://martinfowler.com/eaaDev/EventSourcing.html 用C sharp实现的,我改写成Golang了 最简单的例子 func main() {eProc : NewEventProcessor()//refact : Cargo{Name: "Refactoring"}…...
Vue3 组合式函数,实现minxins
截至目前,组合式函数应该是在VUE 3应用程序中组织业务逻辑最佳的方法。它让我们可以把一些小块的通用逻辑进行抽离、复用,使我们的代码更易于编写、阅读和维护。 一. 什么是“组合式函数”? 根据官方文档说明,在 Vue 应用的概念中…...
什么是钉钉消息推送?
我是3y,一年CRUD经验用十年的markdown程序员👨🏻💻常年被誉为职业八股文选手 在前阵子我就已经接入了钉钉的群机器人和工作消息推送,一直没写文章同步到给大家。 像这种接入渠道的工作,虽然我没接入过&…...
利用 NVIDIATAO 和 WeightBias 加速AI开发
利用 NVIDIATAO 和 Weight&Bias 加速AI开发 利用图像分类、对象检测、自动语音识别 (ASR) 和其他形式的 AI 可以推动公司和商业部门内部的大规模转型。 然而,从头开始构建人工智能和深度学习模型是一项艰巨的任务。 构建这些模型的一个共同先决条件是拥有大量高…...
token - 令牌
文章目录token - 令牌学前须知:1,base64 防君子不防小人2,SHA-256 安全散列算法的一种(hash)3,HMAC-SHA2564,RSA256 非对称加密2.1 JWT - json-web-token1,三大组成2,jwt…...
应用模型开发指南上新介绍
Module、HAP、Ability、AbilitySta-ge、Context……您是否曾经被这些搞不懂又绕不开的知识点困扰? 现在,全新的《应用程序包基础知识》及《应用模型开发指南》为您答疑解惑! 这里有您关注的概念解析、原理机制阐述,也有丰富的…...
Dbeaver连接Hive数据库操作指导
背景:由于工作需要,当前分析研究的数据基于Hadoop的Hive数据库中,且Hadoop服务端无权限进行操作且使用安全模式,在研究了Dbeaver、Squirrel和Hue三种连接Hive的工具,在无法绕开useKey认证的情况下,只能使用…...
【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用
这篇文章,主要介绍消息队列RabbitMQ之常见方法的使用。 目录 一、消息队列常见方法 1.1、连接工厂ConnectionFactory 1.2、连接Connection 1.3、通道Channel 1.4、交换机相关方法 (1)exchangeDeclare()声明交换机 1.5、队列相关方法 …...
Linux字符设备驱动模型之设备号
从上文中可知,在Linux用户空间中,如若需要操作硬件设备,均通过/dev目录下的设备文件节点进行操作,基本上每一种设备都会存在一个或者多个的设备节点。 并且在Linux内核中,其表示字符设备的结构成员也提供了相应的设备号…...
C++多态原理
请看下面的程序,该程序演示了多态类对象存储空间的大小。 #include <iostream> using namespace std; class A {public:int i;virtual void func() {}virtual void func2() {} }; class B : public A {int j;void func() {} }; int main() {cout << si…...
PMP认证与NPDP认证哪个含金量高?
两个证涉及的领域不一样的,一个是项目管理,对应的是项目经理;一个是产品管理,对应的是产品经理。含金量不能相比,但在各自的领域的含金量是很高的,至少专业程度或者知名度是最高的。 我来分别说一下PMP认证…...
改进YOLOv7-Tiny系列:首发改进结合BiFPN结构的特征融合网络,网络融合更多有效特征,高效涨点
💡该教程为改进进阶指南,属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 内容出品:CSDN博客独家更新 @CSDN芒果汁没有芒果 💡本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列:芒果改进YOLOv7-Tiny系列:首发改进结合BiFPN结…...
PPC Insights系列:洞见安全多方图联邦
开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号知…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
