当前位置: 首页 > news >正文

数据结构和算法面试常见题必考以及前端面试题

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 百度一面

  1. 如何实现水平垂直居中
  2. Position 属性的几种区别
  3. 讲一下盒子模型
  4. BFC 怎么实现
  5. 如何实现左右固定,中间自适应的布局
  6. 用 JS 实现一个柯里化函数
  7. 用 JS 实现一个栈
  8. 实现一个 TS 类,如 Partial 、Tick
  9. JS 任务执行机制
  10. 给出一段 Promise+setTimeout 的代码,写出输出顺序
  11. Promise 有哪些方法
  12. 对 async/await 的理解
  13. HTTP 请求响应头有哪些
  14. HTTPS 的是如何进行数据加密的

2.2 字节

  1. redux 中间件有了解吗
  2. Hooks 有了解吗
  3. Canvas 了解吗
  4. 开发过程中图表组件用的是是什么,看过 Echarts 的源码吗
  5. 在开发过程中遇到了哪些难点

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是一种强大的编程语言&#xff0c;但是它也有一些报错&#xff0c;这些报错可能会让你感到困惑。本文将介绍如何解决Python中的常见报错。 首先&#xff0c;让我们来看看Python中最常见的报错&#xff1a;SyntaxError。这种报错表明你的代码中有语法错误&#xff0c…...

LeetCode 1237. Find Positive Integer Solution for a Given Equation【双指针,二分,交互】

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

【C语言】结构体进阶

一、结构体 1. 结构体的声明 &#xff08;1&#xff09; 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。&#xff08;2&#xff09;结构的声明 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 &#xff08;图像增强&#xff09;前言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字符串等值查询中条件字段值末尾有空格也能查到数据问题

一、事故还原 我们仍然使用学生信息表&#xff0c;但是我们只需要保留两个字段即可&#xff1a; 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 参考的这个文章&#xff1a;https://martinfowler.com/eaaDev/EventSourcing.html 用C sharp实现的&#xff0c;我改写成Golang了 最简单的例子 func main() {eProc : NewEventProcessor()//refact : Cargo{Name: "Refactoring"}…...

Vue3 组合式函数,实现minxins

截至目前&#xff0c;组合式函数应该是在VUE 3应用程序中组织业务逻辑最佳的方法。它让我们可以把一些小块的通用逻辑进行抽离、复用&#xff0c;使我们的代码更易于编写、阅读和维护。 一. 什么是“组合式函数”&#xff1f; 根据官方文档说明&#xff0c;在 Vue 应用的概念中…...

什么是钉钉消息推送?

我是3y&#xff0c;一年CRUD经验用十年的markdown程序员&#x1f468;&#x1f3fb;‍&#x1f4bb;常年被誉为职业八股文选手 在前阵子我就已经接入了钉钉的群机器人和工作消息推送&#xff0c;一直没写文章同步到给大家。 像这种接入渠道的工作&#xff0c;虽然我没接入过&…...

利用 NVIDIATAO 和 WeightBias 加速AI开发

利用 NVIDIATAO 和 Weight&Bias 加速AI开发 利用图像分类、对象检测、自动语音识别 (ASR) 和其他形式的 AI 可以推动公司和商业部门内部的大规模转型。 然而&#xff0c;从头开始构建人工智能和深度学习模型是一项艰巨的任务。 构建这些模型的一个共同先决条件是拥有大量高…...

token - 令牌

文章目录token - 令牌学前须知&#xff1a;1&#xff0c;base64 防君子不防小人2&#xff0c;SHA-256 安全散列算法的一种&#xff08;hash&#xff09;3&#xff0c;HMAC-SHA2564&#xff0c;RSA256 非对称加密2.1 JWT - json-web-token1&#xff0c;三大组成2&#xff0c;jwt…...

应用模型开发指南上新介绍

Module、HAP、Ability、AbilitySta-ge、Context……您是否曾经被这些搞不懂又绕不开的知识点困扰&#xff1f; 现在&#xff0c;全新的《应用程序包基础知识》及《应用模型开发指南》为您答疑解惑&#xff01; 这里有您关注的概念解析、原理机制阐述&#xff0c;也有丰富的…...

Dbeaver连接Hive数据库操作指导

背景&#xff1a;由于工作需要&#xff0c;当前分析研究的数据基于Hadoop的Hive数据库中&#xff0c;且Hadoop服务端无权限进行操作且使用安全模式&#xff0c;在研究了Dbeaver、Squirrel和Hue三种连接Hive的工具&#xff0c;在无法绕开useKey认证的情况下&#xff0c;只能使用…...

【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用

这篇文章&#xff0c;主要介绍消息队列RabbitMQ之常见方法的使用。 目录 一、消息队列常见方法 1.1、连接工厂ConnectionFactory 1.2、连接Connection 1.3、通道Channel 1.4、交换机相关方法 &#xff08;1&#xff09;exchangeDeclare()声明交换机 1.5、队列相关方法 …...

Linux字符设备驱动模型之设备号

从上文中可知&#xff0c;在Linux用户空间中&#xff0c;如若需要操作硬件设备&#xff0c;均通过/dev目录下的设备文件节点进行操作&#xff0c;基本上每一种设备都会存在一个或者多个的设备节点。 并且在Linux内核中&#xff0c;其表示字符设备的结构成员也提供了相应的设备号…...

C++多态原理

请看下面的程序&#xff0c;该程序演示了多态类对象存储空间的大小。 #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认证哪个含金量高?

两个证涉及的领域不一样的&#xff0c;一个是项目管理&#xff0c;对应的是项目经理&#xff1b;一个是产品管理&#xff0c;对应的是产品经理。含金量不能相比&#xff0c;但在各自的领域的含金量是很高的&#xff0c;至少专业程度或者知名度是最高的。 我来分别说一下PMP认证…...

改进YOLOv7-Tiny系列:首发改进结合BiFPN结构的特征融合网络,网络融合更多有效特征,高效涨点

💡该教程为改进进阶指南,属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 内容出品:CSDN博客独家更新 @CSDN芒果汁没有芒果 💡本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列:芒果改进YOLOv7-Tiny系列:首发改进结合BiFPN结…...

PPC Insights系列:洞见安全多方图联邦

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号知…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...