Golang|Shopee一面

1、一个有环的链表,如何确认链表有环,环的长度。

LeetCode 142。原题为判断链表是否有环,如果有环找到环的起点。本题修改为求环的长度,基本思路一致,依然为双指针。当快慢指针相遇之后,如果寻找环的起点,则将一个指针从起点开始与另一个指针从相遇点开始以相同速度移动,相遇点即链表起点。如果求环的长度,则将一个指针不动,另一个指针移动到静止指针的位置,移动距离即环的长度。

/*** Definition for singly-linked list.* type ListNode struct {*     Val int*     Next *ListNode* }*/
func detectCycle(head *ListNode) int {slow, fast := head, headfor {if fast == nil || fast.Next == nil {return -1}slow = slow.Nextfast = fast.Next.Nextif slow == fast {break}}slow = slow.Nextlength := 1for slow != fast {slow = slow.Nextlength++}return length
}

2、设计一个HashMap,你要用什么数据结构? 能用数组能做为存储HashMap的数据结构吗?不能的话,要怎么做?怎么解决hash冲突 你的设计里怎样根据key查找对应的值

  1. 使用数组+链表或者数组+红黑树等结构

  2. 可以使用数组作为存储的数据结构

  3. 可以使用链表、跳表和红黑树等数据结构替代

  4. 可以使用链地址法,开放地址法(线性探测、二次探测、双重哈希等)

3、MySQL事务的隔离级别有几种,分别阐述。在串行化隔离级别中,怎么加读锁和写锁,这里的锁是什么锁:表锁?行锁?还是其他锁?

1. 四种事务的隔离级别

  • 读未提交
    • 在“读未提交”隔离级别下,一个事务可以读取其他事务尚未提交的修改数据。这种隔离级别可能导致以下问题:脏读,不可重复读,幻读。
  • 读已提交
    • 在“读已提交”隔离级别下,一个事务只能读取其他事务已经提交的数据。这种隔离级别消除了“脏读”(Dirty Read)问题,但仍然可能遇到“不可重复读”(Non-repeatable Read)和“幻读”(Phantom Read)问题。
  • 可重复读
    • 在“可重复读”隔离级别下,一个事务在读取某行数据时,会对该行数据加锁,从而确保在整个事务期间,该行数据不会被其他事务修改。这样可以避免“不可重复读”问题,即确保在同一事务内对同一行数据的多次读取结果是一致的。但依然无法解决幻读问题。
  • 可串行化
    • 在“可串行化”隔离级别下,数据库系统确保并发事务的执行结果与某种顺序执行这些事务的结果相同。这意味着,从并发事务执行的角度来看,它们是按顺序逐个执行的,即使它们实际上是并发执行的。

4、假设MySQL联合索引为<a,b,c> select * from table_name where c> 10 and a = 10 and b < 10 limit 2000,10 该语句有什么问题,如何优化

联合索引在MySQL中是按照顺序使用的,也就是说,如果你有一个联合索引 (a, b, c),查询必须首先用到 a,然后用到 b,最后用到 c,才能完全利用索引。

优化:

SELECT * FROM table_name WHERE a = 10 AND b < 10 AND c > 10 LIMIT 2000, 10;
SELECT * FROM table_name
WHERE a = 10 AND b < 10
ORDER BY a, b
LIMIT 2000, 10;

5、如何查看cpu占用 top命令中idle字段的解释? 如何查看端口占用? 如何查看文件操作权限? ls -al 中 每行前10个字符的意思 如何更改文件权限

1. top命令

在这里插入图片描述

us (user):用户空间进程的CPU时间百分比,不包括nice值调整的进程。

sy (system):内核空间进程的CPU时间百分比。

ni (nice):用户空间内改变过优先级的进程的CPU时间百分比。

id (idle):CPU空闲时间百分比。此值越高,表示系统空闲时间越多,CPU负载越低。

wa (iowait):CPU等待I/O操作完成的时间百分比。

hi (hardware interrupt):硬件中断时间百分比。

si (software interrupt):软件中断时间百分比。

st (steal time):虚拟机管理程序从虚拟机窃取的CPU时间百分比。

在我的虚拟机中,99.9 id表示当下CPU99.9%的时间是空闲的(因为我刚开机)。

2. 查看端口占用

  1. 使用netstat或者ss命令

-t:显示TCP端口

-u:显示UDP端口

-l:显示监听状态的套接字

-n:显示数字形式的地址和端口

在这里插入图片描述

  1. fuser命令可以显示哪些进程正在使用指定的文件、目录或套接字。

比如查看Redis的端口

在这里插入图片描述

3. 文件操作权限

  1. ls -al (a: 显示隐藏文件)

在这里插入图片描述

  1. 第一个字段10个字符含义:

第一个字符表示文件类型:

  • -:普通文件
  • d:目录
  • l:符号链接
  • c:字符设备文件
  • b:块设备文件
  • s:套接字
  • p:命名管道

接下来的九个字符分为三组,每组三个字符,表示用户(user)、组(group)和其他人(others)的权限:

  • 第一组(

    rw-
    

    )表示用户权限(文件所有者):

    • r:读取权限
    • w:写入权限
    • x:执行权限(进入目录,即cd命令)
  • 第二组(

    r--
    

    )表示组权限(与文件所有者同组的用户):

    • r:读取权限
    • w:写入权限
    • x:执行权限
  • 第三组(

    r--
    

    )表示其他用户权限(其他所有用户):

    • r:读取权限
    • w:写入权限
    • x:执行权限
    1. 更改文件权限

    使用chmod命令可以修改文件和目录的权限。

    chmod u+rwx filename # 赋予文件所有者读取、写入和执行权限
    chmod u=rx,g=rx,o=r filename # 赋予文件所有者和组读取和执行权限,其他人只读权限
    chmod 755 filename # 7:所有者(rwx)5:组(r-x)5:其他人(r-x)
    # 读(r)权限:值为4
    # 写(w)权限:值为2
    # 执行(x)权限:值为1
    

6、介绍一下协程,协程和线程的关系。一个main函数内用go 开启多个协程,现在一个协程panic了,main函数会怎样?为什么?

1. 协程与线程

协程,简单概括就是用户态的轻量级的线程。相比于操作系统级的线程,协程占用更少的资源(如内存和CPU时间),启动和销毁的开销也更小。

特性协程(Goroutine)线程(Thread)
创建开销较低较高
切换开销较低(用户态切换)较高(内核态切换)
内存占用较小(初始栈大小约2KB)较大(初始栈大小约1MB)
调度由Go运行时调度器管理由操作系统内核调度
通信方式使用channel,支持安全的协程间通信需要显式使用锁机制,避免竞争条件
并发模型M(多个协程映射到少量线程上运行)1:1(一个线程映射到一个操作系统线程)

2. 协程panic

单个协程panic的行为:当一个协程发生panic时,如果这个panic没有被捕获并处理(即没有使用recover),这个panic会导致整个程序崩溃,输出panic的相关信息和栈追踪(stack trace)。

main函数的行为:由于main函数本身也是一个协程(主协程),当任何一个协程未捕获的panic发生时,Go运行时会终止所有协程,包括main函数所在的主协程。因此,整个程序会崩溃并退出。

程序示例如下:

package mainimport ("fmt""time"
)func main() {go func() {fmt.Println("Goroutine 1 is running")time.Sleep(2 * time.Second)panic("Panic in Goroutine 1") // 这里会发生panic}()go func() {fmt.Println("Goroutine 2 is running")time.Sleep(4 * time.Second)fmt.Println("Goroutine 2 completed")}()time.Sleep(5 * time.Second)fmt.Println("Main function completed")
}

在这里插入图片描述

7、TCP和UDP协议的区别? TCP中滑动窗口,假设窗口1,2,3已经发送,远端ACK4 ,这时候滑动窗口要向前移动吗?为什么?

1. 区别

特性TCPUDP
连接类型面向连接(需要握手建立连接)无连接
可靠性可靠(提供确认、重传机制)不可靠(不提供确认和重传)
顺序保证保证按顺序接收不保证顺序
流量控制有流量控制(滑动窗口机制)无流量控制
开销头部开销较大(20-60 字节)头部开销较小(8 字节)
速度较慢(由于连接建立和可靠性)较快(由于无连接和无可靠性)
常见用途HTTP/HTTPS, SMTP, FTP视频流, 在线游戏

2. 需要前移滑动窗口

接收到 ACK 4 意味着序号 1、2、3 的数据包都已经成功接收,并且接收方期望下一个数据包的序号是 4。这时,发送方知道序号 1、2、3 的数据包已经确认,可以将窗口向前滑动 3 个位置。

8、Http如何实现有状态连接 ?cookie 和session的区别

1. 实现有状态连接

1. 使用 Cookies

Cookies 是服务器发送给客户端的一小段数据,客户端会在后续请求中带上这些数据。服务器可以通过这些数据识别不同的客户端,并维护会话状态。

2. 使用 URL 参数

在 URL 中添加查询参数来传递状态信息。服务器可以通过这些参数识别客户端会话。

3. 使用 Token 认证

Token是一种安全的认证机制,可以在客户端和服务器之间传递有状态信息。Token 一般在用户登录时生成,并在后续请求中传递给服务器。

4. 使用服务器端会话存储

服务器可以使用内存或数据库(比如Session)来存储会话数据,并通过唯一的会话 ID 识别不同的客户端。会话 ID 可以通过 Cookie 或 URL 参数传递。

2. Cookie与Session区别

存储位置: Cookie 在客户端,Session 在服务器端。

安全性: Session 更加安全,因为数据存储在服务器端,不容易被客户端篡改。

生命周期: Cookie 可以持久化存储,而 Session 通常在浏览器关闭或会话超时后失效。

大小限制: Cookies 有大小限制,而 Sessions 依赖于服务器的存储能力。

9、编程题 字符串加法:实现加法,但是输入和输出的数字都是字符串格式

LeetCode 43。原题为字符串相乘,本题为相加,基本原理相同,但本题模拟的过程要简单很多。

// 本方法为实现正整数加法,如果数字为一整一负,则需要按照减法实现。若有小数,亦需单独处理。
// 实际应用中,最好选用math/big包实现任意精度大数的基本运算
func add(a string, b string) string {m, n := len(a), len(b)i, j := m - 1, n - 1add := 0res := []rune{}for i >= 0 || j >= 0 || add > 0 {x := addif i >= 0 {x += int(a[i] - '0')i--}if j >= 0 {x += int(b[j] - '0')j--}add = x / 10res = append(res, rune(x % 10 + '0'))}k := len(res)for i := 0; i < k - i - 1; i++ {res[i], res[k-1-i] = res[k-1-i], res[i] } return string(res)
}

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/380457.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防火墙内容安全综合实验

一、实验拓扑 二、实验要求 1&#xff0c;假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件&#xff0c;内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2&#xff0c;我们需要针对办公区用户进行上网行为管理&#xff0c;要…

【LeetCode】翻转二叉树

目录 一、题目二、解法完整代码 一、题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root…

数据可视化配色新工具,颜色盘多达2500+类

好看的配色,不仅能让图表突出主要信息,更能吸引读者,之前分享过很多配色工具,例如, 👉可视化配色工具:颜色盘多达3000+类,数万种颜色! 本次再分享一个配色工具pypalettes,颜色盘多达2500+类。 安装pypalettes pip install pypalettes pypalettes使用 第1步,挑选…

1.17、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理 竞争学习是一种无监督学习方法&#xff0c;其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络&#xff08;Competitive Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;其核心部分是…

【JavaScript 算法】拓扑排序:有向无环图的应用

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现方法一&#xff1a;Kahn算法方法二&#xff1a;深度优先搜索&#xff08;DFS&#xff09;注释说明&#xff1a; 三、应用场景四、总结 拓扑排序&#xff08;Topological Sorting&#xff09;是一种…

《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境

安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题&#xff08;可选&#xff09;5. 安装代码高亮插件 AsmDude&#xff08;可选&#xff09;6. 通义灵码&#xff08…

2024年第二季度 DDoS 威胁趋势报告

2024 年上半年&#xff0c;Cloudflare 缓解了 850 万次 DDoS 攻击&#xff1a;第一季度 450 万次&#xff0c;第二季度 400 万次。总体而言&#xff0c;第二季度 DDoS 攻击数量环比下降了 11%&#xff0c;但同比增长了 20%。 DDoS 攻击分布&#xff08;按类型和手段&#xff09…

面试官听了我说的单例设计模式,让我出门右转

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

Go语言之参数传递

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 修改参数 假设你定义了一个函数&#xff0c;并在函数里对参数进行…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…

C语言 | Leetcode C语言题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){int i 0;int j matrixColSize[0] - 1;while(j > 0 && i < matrixSize){if(target < matrix[i][j])j--;else if(target > matrix[…

达梦数据库的系统视图v$mal_link_status

达梦数据库的系统视图v$mal_link_status 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$MAL_LINK_STATUS 是一个动态性能视图&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于显示MAL&#xff08;Multi-threaded Architecture Link&…

cs224w笔记(p5)

链接预测任务的两种类型&#xff1a;随机缺失边&#xff1b;随时间演化边。 第一种假设可以以蛋白质之间的交互作用举例&#xff0c;缺失的是研究者还没有发现的交互作用。 第二种假设可以以社交网络举例&#xff0c;随着时间流转&#xff0c;人们认识更多朋友。 基于相似性进…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十六章 Linux驱动初探

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Android 小白菜鸟从入门到精通教程

前言 Android一词最早出现于法国作家利尔亚当&#xff08;Auguste Villiers de l’Isle-Adam&#xff09;在1886年发表的科幻小说《未来的夏娃》&#xff08;L’ve future&#xff09;中。他将外表像人的机器起名为Android。从初学者的角度出发&#xff0c;通过通俗易懂的语言…

使用 useLazyAsyncData 提升数据加载体验

title: 使用 useLazyAsyncData 提升数据加载体验 date: 2024/7/19 updated: 2024/7/19 author: cmdragon excerpt: 摘要&#xff1a;本文介绍useLazyAsyncData函数在Nuxt 3中的使用&#xff0c;以提升数据加载体验。此函数支持异步获取数据并在组件中处理挂起与错误状态&…

[网鼎杯 2018]Fakebook

解法一 在robots.txt&#xff0c;可以发现/user.php.bak 下载下来是一段代码 <?phpclass UserInfo {public $name "";public $age 0;public $blog "";public function __construct($name, $age, $blog){$this->name $name;$this->age (…

spring-boot 整合 redisson 实现延时队列(文末有彩蛋)

应用场景 通常在一些需要经历一段时间或者到达某个指定时间节点才会执行的功能&#xff0c;比如以下这些场景&#xff1a; 订单超时提醒收货自动确认会议提醒代办事项提醒 为什么使用延时队列 对于数据量小且实时性要求不高的需求来说&#xff0c;最简单的方法就是定时扫描数据…

电机泵盖机器人打磨去毛刺,选德国进口高精度主轴

机器人打磨去毛刺该如何选择主轴呢&#xff1f;首先我们需要考虑的是工件的材质&#xff0c;电机泵盖通常使用铸铁、不锈钢、合金钢等金属材质&#xff0c;因此这类保持的硬度较高&#xff0c;一般会选择功率、扭矩较大的德国进口高精度主轴Kasite 4060 ER-S。 Kasite 4060 ER-…

【Espressif-ESP32S3】【VScode】安装【ESP-IDF】插件及相关工具链

一、ESP-IDF简介 二、VScode安装ESP-IDF插件 三、安装ESP-IDF、ESP-IDF-Tools以及相关工具链 四、测试例程&编译烧录 五、IDF常用指令 资料下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15Q2rl2jpIaKfj5rATkYE6g?pwdGLNG 提取码&#xff1a;GLNG 一、ESP-…