【本周面试问题总结--陆续补充】

2024-06-03 11:04

本文主要是介绍【本周面试问题总结--陆续补充】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

确实感觉面试的时候,数据结构和数据库这块的被问到的最多。。涉及到代码方面可能会比较关注时间复杂度掌握情况,看你代码能不能优化,是不是只会暴力破解,数据库的优化,出现问题如何解决等等

01.如何判断链表中是否有环

        ①穷举遍历:从头节点开始,依次遍历单链表中的每一个节点。每遍历到一个新节点,将新节点和此前节点进行比较,若已经存在则说明已被遍历过,链表有环。

        ②快慢指针:创建两个指针,同时指向链表的头节点。然后开始一个大循环,在循环体中指针1每次移动一个节点,指针2每次移动两个节点。(可以类比环形跑道,一个快一个慢在同一起跑线开始后面跑的快的一定会再次超过跑的慢的,假设从链表头节点到入环点的距离是D,链表的环长是S,那么循环会进行S次)

02.如何找出有环链表的入环点

        这个哥哥讲的挺好的,放个链接

如何判断链表有环以及求入环节点 - 简书 (jianshu.com)

03.数据库方面了解程度

        我比较了解数据库(先说一些基本理解),包括数据库的类型可以分为关系型数据库和非关系型数据库,常用的数据库管理系统有MySQL,MongoDB等等,数据库的基本操作有CRUB:创建、读取、.....,我曾经参与过一个数据库设计与优化的项目。在这个项目中,我负责设计数据库,优化查询语句,调整数据库配置等等,同时我还实际应用了一些数据库管理工具来监控和维护数据库。(自己要扩展说出来这些东西,避免面试官深问的时候说不出来东西。。)

04.如果数据库中进行多线程出现数据安全问题如何解决(锁)

  1. 使用事务:在数据库中使用事务可以确保一系列操作要么全部执行成功,要么全部失败,从而保持数据的一致性。在多线程环境下,通过合理地使用事务可以避免数据异常和冲突。

  2. 加锁:在数据库中使用锁机制来确保在某个线程访问数据时,其他线程无法对其进行修改,从而避免数据的并发修改问题。需要根据具体情况选择合适的锁机制,如行级锁、表级锁等。

  3. 乐观锁和悲观锁:乐观锁是一种乐观估计并发操作不会发生冲突的方式,通常通过版本号或时间戳进行判断;悲观锁则是一种悲观估计并发操作会发生冲突的方式,通常通过加锁实现。

  4. 合理的并发控制策略:通过合理的并发控制策略,如控制并发线程的访问频率、引入队列机制等来减少并发访问导致的数据安全问题。

  5. 数据库设计优化:通过合理的数据库设计和索引设计来降低数据库操作的复杂度,减少并发操作的影响。

  6. 异常处理:在多线程操作中,需要合理地处理并发操作可能引发的异常情况,确保数据的完整性和一致性。

05.二叉树的时间复杂度

数据结构:常见算法的时间复杂度汇总_数据结构各种算法的时间复杂度-CSDN博客

延申:其他数据类型的应用场景

1.链表:需要频繁插入删除的场景。在操作系统中,链表常用于管理内存(分配与回收)。例如,当系统需要分配或释放内存块时,可以使用链表来跟踪哪些内存块是可用的,哪些已经被用。此外,进程调度、文件系统管理等也常涉及链表的使用。

2.数组:数据量小,不会频繁更改的场景。存储一个班级的所有学生的分数,或者存储一个游戏的所有角色的属性。

3.栈:需要实现后进先出,例如实现浏览器的后退功能,计算机中进行算术表达式的计算,例如实现函数调用、括号匹配等场景。

4.队列:需要实现先入先出。实现任务调度、缓冲。如车站售票口买票的队伍,排在前面的人先买到票离开队伍,后来的人则加入队伍的末尾等候买票。队列还可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等

5.哈希表:哈希表适用于那种查找性能要求高,数据元素之间无逻辑关系要求。哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理的不好会浪费大量的时间,导致应用崩溃。

6.树和图:最重要的两个结构。目标分解和层序关系等都是相当于数据结构中的树的应用,还可以实现文件系统、决策树等场景。图是描述多对多事物之间关系的,当你询问GPS时,GPS系统为什么能给指出一条两地之间的路线,这就是利用了图的存储和遍历运算,求出最优解。在现实生活中很多复杂的关系都可以用图来描述并利用图去解决一些问题,例如社交网络、路由协议。

7.堆:堆是一类特殊的树形数据结构,通常用数组来实现。它主要用于优先队列等场景,具有高效的插入和删除操作。堆分为最大堆和最小堆两种类型。

06.服务器端的安全有哪些层面,为我画一棵树

  1. 网络安全:包括防火墙、网络访问控制列表、入侵检测系统(IDS)和入侵防御系统(IPS)等网络安全设备,用于保护服务器免受网络攻击。

  2. 操作系统安全:包括操作系统的安全配置、及时安装操作系统的安全更新补丁、限制不必要的服务、使用安全的账户和访问控制策略等来保护操作系统安全。

  3. 身份验证与授权:采用安全的身份验证机制,如多因素身份验证、密钥管理等,以及合理的授权策略,确保只有授权的用户可以访问服务器资源。

  4. 应用程序安全:确保服务器上运行的应用程序没有安全漏洞,采用安全的编程实践,对输入进行正确的验证和过滤,以及进行安全的错误处理。

  5. 数据安全:使用加密技术保护数据的传输和存储安全,采用数据备份和恢复策略,以及访问控制策略来确保数据安全。

  6. 日志和监控:建立完善的日志系统,对服务器的各种操作和事件进行监控和记录,及时发现异常行为并采取相应的应对措施。

07.SQL注入、DDOS攻击、泛洪攻击是什么

08.翻转数组如何实现

09.关于java和python的区别

  1. 语法:Java是一种静态类型的编程语言,需要在编写代码时声明变量的数据类型,并且需要使用大括号来表示代码块。而Python是一种动态类型的编程语言,不需要声明变量的数据类型,并且使用缩进来表示代码块。

  2. 性能:Java通常比Python执行更快,这是由于Java是一种编译型语言,代码在运行之前会被编译成字节码,然后在Java虚拟机(JVM)上执行;而Python是一种解释型语言,代码在运行时逐行被解释器解释执行。编译型语言通常有更高的执行效率,因为字节码已经被提前优化和编译成机器码,而解释型语言则需要动态地解释执行。

  3. 应用领域:Java常用于企业级应用开发、Android应用开发、大型系统开发等;Python常用于数据科学、人工智能、Web开发等领域。

10.对业务的了解程度(之前的实习经历)

11.怎么高效的创建SQL表

  1. 规划数据模型:在创建表之前,首先需要对数据模型进行规划。考虑需要存储的数据及其关系,设计出符合业务需求的数据模型。

  2. 选择合适的数据类型:根据数据模型的规划,选择合适的数据类型来存储数据,尽量避免使用过大或过小的数据类型,以节省存储空间。

  3. 设计合适的索引:根据数据的查询需求,设计合适的索引来提高查询效率。通常可以为经常用于查询、连接或排序的字段创建索引。

  4. 使用约束:使用合适的约束来保证数据的完整性,比如主键约束、外键约束、唯一约束、非空约束等,以防止数据出现不符合预期的情况。

  5. 考虑性能优化:在创建表的过程中,可以考虑一些性能优化的策略,比如合理分配数据文件和日志文件,选择合适的存储引擎类型,以及预估数据量大小来调整表结构等。

  6. 使用DDL语句创建表:最后,使用SQL的数据定义语言(DDL)中的CREATE TABLE语句来创建表,确保表的结构和约束符合设计需求。

12.什么是好的键值

  1. 唯一性:键值应该是唯一的,这样可以确保每个键都对应着唯一的数值或对象,避免出现混乱或错误的情况。

  2. 代表性:键值应当能够清晰、准确地代表对应的数据或对象,以便于快速识别和定位。

  3. 不易变性:键值应当尽量是不易变的,避免在使用过程中频繁改变,这样可以确保使用键值来检索数据时不会出现意外的情况。

  4. 易于理解:键值应当具有良好的可读性和易懂性,这样不仅有助于开发人员理解和维护数据,也方便了解数据的含义。

  5. 适度长度:键值的长度应当适度,既不宜过短导致信息不足,也不宜过长导致冗余和复杂性增加。

13.python web的开发经验有什么

  1. Web 框架的使用经验:介绍你在 Python Web 开发中使用过的框架,比如 Flask、Django、FastAPI 等,以及你对这些框架的理解和使用经验。可以举例说明你如何利用这些框架构建 Web 应用。

  2. 数据库操作经验:谈谈你在 Python Web 开发中使用数据库的经验,比如使用 SQLAlchemy 进行数据库操作、ORM 映射、数据迁移等经验。

  3. 前端开发经验:如果有前端开发经验,可以介绍你在 Python Web 项目中使用过的前端技术和工具,比如 JavaScript、Vue.js、React 等,以及与后端的数据交互经验。

  4. 接口开发经验:描述你在 Python Web 开发中接口的设计与实现经验,比如 RESTful API 的设计、请求参数验证、异常处理等方面的经验。

  5. 测试与部署经验:谈谈你在 Python Web 开发中的测试方法和部署经验,比如单元测试、集成测试、持续集成等方面的实践经验。

  6. 项目经验:如果有相关项目经验,可以结合具体项目,描述你在项目中的角色和贡献,以及遇到的挑战和解决方案。

14.在Java中除了thread还有什么能实现多线程(这里是因为我说了thread)

        继承Thread类:创建一个类并继承Thread类,重写run()方法,在run()方法中定义线程需要执行的任务,然后创建该类的实例并调用start()方法启动线程。

        Runnable接口:创建一个类实现Runnable接口,实现run()方法,在run()方法中定义线程需要执行的任务,然后创建Thread对象,将实现了Runnable接口的类的实例作为参数传递给Thread的构造函数,并调用start()方法启动线程。

15.fastapi和mysql接口存储

在使用FastAPI和MySQL搭建接口服务时,可以通过FastAPI提供的路由和请求处理功能来实现与MySQL数据库的交互。比如通过FastAPI创建了两个接口,一个用于创建数据,一个用于获取数据。在接口的实现中,通过pymysql库来连接MySQL数据库,并执行相应的数据库操作。

代码题:

约瑟夫环

可以使用循环链表或者数组来模拟这个过程。下面是使用数组的解决思路:

  1. 创建一个长度为 n 的数组,用来表示 n 个人的报数情况,初始值全部设为 1,表示这些人都还在圈内。

  2. 设置一个指针变量当前位置 cur,初始值为 0,表示从第一个人开始报数。

  3. 在循环中模拟报数和出列的过程,直到所有人都出列为止。在循环中,每次移动指针 cur 到下一个报数的人,当报数达到 m 时,将该人标记为出列状态(可以将对应数组元素置为 0),然后继续下一个人的报数。

  4. 指针 cur 每次移动 m 步,直到所有人都出列。

令矩阵行列对角线之和相等

这篇关于【本周面试问题总结--陆续补充】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026808

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har

MAVEN3.9.x中301问题及解决方法

《MAVEN3.9.x中301问题及解决方法》本文主要介绍了使用MAVEN3.9.x中301问题及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录01、背景02、现象03、分析原因04、解决方案及验证05、结语本文主要是针对“构建加速”需求交

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的