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

汕尾商城网站建设怎么在百度上免费做广告

汕尾商城网站建设,怎么在百度上免费做广告,小升初在线做试卷的网站,长沙建设外贸网站狠狠的被鞭打了快两个小时… 注意我写的题解不一定是对的#xff0c;如果你认为有其他答案欢迎评论区留言 bg#xff1a;23届 211本 社招 1. 自我介绍 2. 讲一个项目的点#xff0c;因为用到了中间件平台的数据同步#xff0c;于是开始鞭打数据同步。。 3. 如果同步的时候… 狠狠的被鞭打了快两个小时… 注意我写的题解不一定是对的如果你认为有其他答案欢迎评论区留言 bg23届 211本 社招 1. 自我介绍 2. 讲一个项目的点因为用到了中间件平台的数据同步于是开始鞭打数据同步。。 3. 如果同步的时候插入了新数据怎么处理 看我们业务对数据实时性的要求 如果实时性要求不高可以设置定时任务T1小时、T30分钟进行同步或者统一处理如果实时性要求高我们可以监听binlog进行消费不过要做好幂等性方面的工作防止重复消费 4. binlog有什么用 binlog是存储mysql的数据变更我们可以通过监听binlog知道数据库发生了哪些变更通常可以使用binlog进行数据同步、数据备份以及主从复制等等… 6. binlog的数据格式有哪些 binlog日志有三种数据格式 STATEMENT每一条修改数据的原声 SQL 语句都会被记录到 binlog 中。但有动态函数的问题比如你用了 uuid 或者 now 这些函数那么就会导致主库上执行的结果并不是从库执行的结果这种随时在变的函数就会导致复制前后的数据不一致。ROW记录行数据最终被修改成什么样了不会出现 STATEMENT 下动态函数的问题。但 ROW 的缺点是每行数据的变化结果都会被记录比如执行UPDATE user_user SET a 1 WHERE id 100 语句那么有多少行数据产生了变化日志就会记录多少这会使 binlog 文件过大而在 STATEMENT 格式下只会记录一个 update 语句而已MIXED包含了 STATEMENT 和 ROW 模式它会根据不同的情况自动使用 ROW 模式和 STATEMENT 模式 7. 如何监听binlog 一般有两种方案 基于 canal 中间件进行监听binlog基于flinkcdc监听binlog 其实这两种区别不大业内常用的是flinkcdc来监听。原理就是模拟主从复制将自身模拟程一个slave节点向master节点发送dump协议当master节点收到dump协议请求之后就开始推送binlog到slave。 8. mysql dump 之后需要进行什么处理 一般接受到的是byte流数据我们需要解析 binary log 对象才能拿到正在的变更后的数据。那么在接收到主服务器上的 dump 数据后会根据数据的类型SQL 查询语句或 Binlog来进行处理如果是STATEMENT格式就直接执行sql如果是ROW格式就直接记录数据。不确定是不是这样 9. 唯一索引和联合索引有什么区别 唯一索引是指索引列的取值必须是唯一的索引列中的值不能重复。如果尝试插入重复值数据库会抛出唯一性约束错误。联合索引是指索引包含多个列通过这些列的组合值进行索引。当查询时涉及到联合索引的所有列数据库会使用该联合索引进行优化查询提高多列查询的效率特别是当这些列经常一起作为查询条件时。联合索引中的列顺序很重要查询时必须按照最左匹配原则进行查询否则索引无法生效。 10. 联合索引可以是唯一索引吗 可以的这样就意味着索引列的组合值必须是唯一 举个例子 创建下面一张表结构如下结构我们创建了一个联合的唯一索引username和email作为联合的唯一索引列 当我们插入数据 插入相同索引数据的时候就会报错了 11. 那mysql索引结构是什么样的 mysql的索引结构是B树 根节点包含指向子节点的指针。中间节点包含索引键值和指向子节点的指针。叶子节点包含索引键值和指向实际数据行的指针。 数据按照索引键值的顺序存储在叶子节点中这样可以通过在树中进行一系列比较操作来快速定位到所需的数据行。叶子节点之间通过指针连接形成一个有序的链表这样可以支持范围查询和排序操作。 12. 一个索引的建立过程是什么样的 插入数据当插入一个新的数据项时首先在叶子节点中找到合适的位置插入数据。如果插入后叶子节点的数据项数量超过了阶数的限制就需要进行节点分裂操作。节点分裂当一个节点中的数据项数量超过了阶数的限制时该节点需要进行分裂。分裂操作会将该节点中的数据项分为两部分然后将中间值上移到父节点中以保持 B树的平衡性。向上递归如果父节点也满足不了插入新数据项的条件就需要继续向上递归进行节点分裂操作直到根节点。如果根节点也满了则根节点会分裂成两个节点同时树的高度增加一层。更新索引在每次节点分裂后需要更新父节点的索引信息确保索引的正确性。删除数据删除数据时首先在叶子节点中找到要删除的数据项然后将其删除。如果删除后导致节点的数据项数量低于阶数要求的最小值需要进行节点合并操作。节点合并当一个节点中的数据项数量低于阶数要求的最小值时该节点需要与其兄弟节点进行合并操作。合并操作会将两个节点合并成一个节点并将父节点中的相应索引项删除。 13. 如果我对age字段建立索引建立的过程是什么样的 举个age的例子 最开始的时候是一段链表 然后当我们数据变多的时候会对这个链表进行拆分抽取 当我们的数据越来越多的时候会不断向上抽取一般会抽成三层 14. 为什么走索引加快了 减少数据扫描当数据库表中有索引时MySQL可以通过索引快速定位到符合查询条件的数据行而不需要对整个表进行扫描。这样可以大大减少需要扫描的数据量提高查询速度。加快数据定位索引使得数据库系统能够更快速地定位到需要的数据行而不需要逐行查找。通过索引MySQL可以跳过大部分数据行直接定位到目标数据行从而减少了数据访问的时间。降低磁盘I/O操作索引可以减少磁盘I/O操作的次数。由于索引使得数据定位更快速数据库系统需要读取的数据页数减少从而减少了磁盘I/O操作提高了查询效率。 15. 为什么age可以建立索引sex字段就不行 sex字段一般是个枚举值012那么如果是sex的枚举的话就会变成 我们最终无法通过索引命中我们需要的节点所以我们必须扫全表才能找到这条数据 注意一点 InnoDB中的聚集索引的叶节点就是最终的数据节点InnoDB中的非聚集索引叶子节点指向的是相应的主键值。而MyISAM中非聚集索引的主键索引树和二级索引树的叶节仍然是索引节点但它有一个指向最终数据的指针 16. 为什么sex建立索引还是会扫全表 性别字段因为可重复所以只能建立非聚集索引然而因为非聚集索引叶子节点存储的是索引值和聚集索引值所以非聚集索引不能直接获取到数据需要通过逻辑指针进行二次查找来获取数据也就是需要回表的。 那么无论搜索哪个sex字段都可能得到1/3的数据。在这些情况下还不如不要索引而且数据库优化器最终很大概率也不会选择走这个索引因为 MySQL 优化器发现某个值出现在表的数据行中的百分比很高的时候它一般会忽略索引进行全表扫描。 17. 如果我订单表达到一定规模之后mysql单表是撑不住了怎么办 首先要做好调研工作根据当前业务的发展情况去选择合适的技术方案。 如果这个业务比较重要(能赚钱)那么我们可以做分库分表用比较多的人力和精力去维护。如果这个业务相对来说不那么重要(辅助性业务)可以用当前比较热门的分布式数据库做DTS比如 tidb、ES减少我们的投入精力。 18. 具体你会怎么分库分表 一般有水平扩展和垂直扩展然后根据当前业务现状选择合适的分片键 水平扩展根据日期进行分库分表同一时期分在一个表或者一个库中。垂直扩展根据分片键进行hash命中哪一个库和表就存在哪一个库表分片键一般会取用户id的后57位 19. 分库分表如果进行条件查询 分片键只是为了路由命中我们要查的数据在哪个库哪个表命中之后还是需要带条件走索引查询。 一般会设置多个分片键以防多个业务场景需要如果实在没有命中任何库表会兜底去查分布式数据库tidb、es之类的因为tidb、es会有dts进行同步。 20. 同步ES不使用其他组件单单是mysql怎么操作所有表遍历找过去吗索引会不会失效 如果我们不走ES、TiDB这种并且没有分片键命中的话那么我们就要在go里面用到协程池去做批量查询的操作了每张表都用新协程去查询然后聚合结果同时用协程池进行池化减少协程的频繁创建与销毁。 当然其实这种场景是很少的99%的业务场景都可以使用分片键去处理如果实在很难用分片键处理我们一般会和业务沟通甚至拒掉这个需求。索引是不会失效的如果索引失效的话那将会是P2级及以上的bug了。 21. okredis源码有了解吗他的线程模型是什么样的 其实我们说redis是单线程说的是只有一个进程处理主线任务主线任务就是将接受客户端命令将命令传送到服务端服务端处理完再将数据返回给客户端。 其实redis在启动的时候是会启动一个后台线程去加载日志数据。 22. redis 有哪些存储日志的形式同步还是异步 RDB持久化就是指的讲当前进程的全量数据生成快照存入到磁盘中触发RDB机制又分为手动触发与自动触发。AOF 持久化是以独立的日志记录每次写命令也就是增量数据所以AOF主要就是解决持久化的实时性。 是否异步 AOF 是同步的RDB的save是同步的bgsave是异步的 AOF和主进程的关系如下 AOF的写入是同步的AOF写入不会阻塞当前的写命令但是有可能会阻塞下一个写命令 注意是写命令进行日志写入读命令才会记录日志 23. 那AOF具体是怎么存储日志的 Redis 写操作命令结束后会将命令重写到 AOF 缓冲区然后通过系统调用将 AOF 缓冲区的数据拷贝到了内核缓冲区然后内核会将数据写入硬盘具体内核缓冲区的数据什么时候写入到硬盘由内核决定而这也是数据丢失的一个隐患。 24. AOF不断的写日志不是会有很多的io操作吗怎么避免 其实我们业务背景中redis的读和写的比例一般会是9:1这个状态写一次redis就意味着这一次请求可能打到DB了。如果是在一些极限的场景比如滴滴的订单需要频繁的修改状态那么我们可以设置redis的aof的落盘策略。 Always每次写操作命令执行完后实时将 AOF 日志数据写回硬盘Everysec每次写操作命令执行完后先将命令写入到 AOF 文件的内核缓冲区然后每隔一秒将缓冲区里的内容写回到硬盘No Redis 不控制写回硬盘的时间每次写操作命令执行完后先将命令写入到 AOF 文件的内核缓冲区再由操作系统决定什么时候将缓冲区内容写回硬盘 如果我们需要极致的性能选择No就可以了当然高回报的背后是高风险由于我们并不知道操作系统会什么时候写入硬盘所以如果redis宕机了我们将会丢失这段时间的数据。所以在生产当中我们一般会使用AOF RDB的组合方式来保证AOF的持久化。 25. RDB是怎么进行操作 redis 一般会有两个命令生产RDB一个是save另一个是bgsave区别在于是否阻塞主线程 save 是和操作命令在同一个线程里面如果有大key写入RDB文件会造成阻塞。bgsave是创建一个子进程来写入RDB文件不会造成阻塞。 RDB和everysec模式的AOF区别就是一个是全量一个是增量 那么在bgsave中通过fork函数创建的子进程会和父进程共享同一片内存数据因为在fork的时候子进程会复制父进程的页表数据而这两个进程的页表数据一摸一样也就表示会指向同一片物理内存地址。 这样是为了减少创建子进程时的性能损耗加快子进程的创建速度毕竟创建子进程的过程中是会阻塞主线程的。 26. 那如果数据库和redis需要缓存一致性怎么解决 其实我们一般都是先更新数据库再更新redis的在业务允许的下可以接受一定时间段的数据不一致因为我们业务场景都只是要求数据的最终一致性就可以了。 27. 那我不考虑最终一致性我要强一致性怎么解决 那我们可以需要牺牲一点性能了我们将 redis 和 mysql 的数据绑定在一起redis 使用 lua 脚本更新和mysql 的更新数据绑定在一点要么一起成功一起失败如果失败则需要告警走降级兜底然后人工快速介入。 又或者可以把缓存删掉然后再更新数据库此时大量的请求将会打到DB这时候我们就需要使用singlefight 这种在缓存失效的时候使用的合并请求的方式减轻DB的压力。 其实无论怎么选型都不会非常完美的CAP必定会牺牲一个即使是99.9999%高可用的阿里云也会有宕机的情况。这个一致性如果要深究一篇文章都讲不完…这里不再过度描述… 28. ok网络这块我也问问。http和https的区别是什么 http和https其实就是有一个加密的过程这个加密就是tls、ssl加密。 29. https是怎么建立连接的先建立什么再建立什么 先建立tcp连接再建立ssl、tls连接 30. 具体是怎么建立的ssl tls加密 客户端 Hello客户端向服务器发送一个Client Hello消息其中包含支持的加密算法、协议版本、随机数等信息。服务器 Hello服务器收到Client Hello后选择加密算法和协议版本并向客户端发送一个Server Hello消息。证书验证服务器还会发送自己的数字证书给客户端客户端会验证证书的有效性包括证书是否由受信任的证书颁发机构颁发。密钥交换如果证书验证通过客户端生成一个随机数使用服务器的公钥(从证书中提取)加密后发送给服务器服务器使用自己的私钥解密得到该随机数用于生成对称加密的会话密钥。完成握手握手阶段完成后客户端和服务器都知道如何加密通信并且共享一个会话密钥用于加密和解密数据。 四次握手主要是交换以下信息 数字证书该证书包含了公钥等信息一般是由服务器发给客户端接收方通过验证这个证书是不是由信赖的CA签发或者与本地的证书相对比来判断证书是否可信假如需要双向验证则服务器和客户端都需要发送数字证书给对方验证 三个随机数这三个随机数构成了后续通信过程中用来对数据进行对称加密解密的对话密钥。 首先客户端先发第一个随机数N1然后服务器回了第二个随机数N2这个过程同时把之前提到的证书发给客户端这两个随机数都是明文的而第三个随机数N3(预主密钥)客户端用数字证书的公钥进行非对称加密发给服务器服务器用只有自己知道的私钥来解密获取第三个随机数。服务端和客户端都有了三个随机数N1N2N3然后两端就使用这三个随机数来生成“对话密钥”在此之后的通信都是使用这个“对话密钥”来进行对称加密解密。因为这个过程中服务端的私钥只用来解密第三个随机数从来没有在网络中传输过这样的话只要私钥没有被泄露那么数据就是安全的。 加密通信协议就是双方商量使用哪一种加密方式假如两者支持的加密方式不匹配则无法进行通信 一句话概括也就是用非对称加密来生成对称加密的密钥 31. http的请求头和响应头一般有什么信息有什么用 HTTP请求头Request Headers Host指定请求的目标主机。User-Agent标识发起请求的客户端软件。Accept指定客户端能够接受的内容类型。Content-Type指定请求体的MIME类型。Authorization用于身份验证的信息。Cookie包含客户端发送给服务器的Cookie信息。Referer指示请求的来源页面的URL。Cache-Control指定缓存行为。Connection指定是否保持持久连接。Accept-Encoding指定客户端支持的内容编码方式。 HTTP响应头Response Headers Content-Type指定响应体的MIME类型。Content-Length指定响应体的长度。Server指定响应的服务器软件。Set-Cookie在响应中设置Cookie。Cache-Control指定缓存行为。Location指定重定向的URL。Expires指定响应过期的时间。Last-Modified指定资源的最后修改时间。Access-Control-Allow-Origin指定允许跨域请求的来源。 32. ok页的概念你清楚吗 对于进程来说使用的都是虚拟地址 虚拟地址空间划分为多个固定大小的虚拟页(VP)物理地址空间划分为多个固定大小的物理页(PP)虚拟页和物理页的大小是一样通常为4KB。页的主要功能是做出虚拟地址对物理地址的映射。 页表每个进程维护一个单独的页表页表是一种数组结构存放着各虚拟页的状态是否映射是否缓存。页表项页表中的每个条目称为页表项其中包含了虚拟页号和物理页框号之间的映射关系。页面调度当程序访问一个虚拟地址而对应的物理页不在内存中时会发生页面调度操作系统会从磁盘中将相应的页面加载到内存中。页面置换当内存中的页面不足时操作系统需要选择一个页面进行置换page replacement将其写回磁盘并加载新的页面。 通过使用页面和页表操作系统可以实现虚拟内存管理提高内存利用率和程序的运行效率。虚拟内存技术允许程序看到一个比实际物理内存更大的地址空间同时可以将不常用的页面置换到磁盘上从而提高系统的整体性能和稳定性。 33. 页碎是什么 页碎片是指在虚拟内存系统中由于分配和释放内存的过程中导致的页面不连续、零散的现象。 在虚拟内存管理中内存通常被划分为固定大小的页面而应用程序请求的内存空间可能不是页面大小的整数倍这就导致了页面的碎片化。 而大量的页碎可能会导致以下问题 分配性能下降当系统需要分配大块连续内存时如果内存中存在大量碎片系统可能需要进行额外的合并操作降低了分配性能。缓存失效率增加页面碎片化也可能导致缓存的失效率增加因为数据分散存储在不同的页面中需要更多的缓存行加载降低了缓存的效率。内存利用率下降由于页面被分割成小块或者存在空隙导致实际可用内存空间比总内存空间要少。缓存失效率增加页面碎片化也可能导致缓存的失效率增加因为数据分散存储在不同的页面中需要更多的缓存行加载降低了缓存的效率。 通常会采取一些策略来优化内存分配和释放比如使用内存池、动态内存分配算法、碎片整理等技术来减少碎片化提高内存利用率和系统性能。 34. 为什么需要内存对齐 内存对齐就是将数据存放到一个是字的整数倍的地址指向的内存之中。处理器在执行指令去操作内存中的数据这些数据通过地址来获取。为了能让复杂数据结构对齐编译器一般会对数据结构做一些填充。 内存对齐总的来说就是两个原因提升效率和避免出错。 某些处理器只能存取对齐的数据存取非对齐的数据可能会引发异常某些处理不能保证在存取非对齐数据的时候的操作是原子操作相比于存取对齐的数据存取非对齐数据需要额外花费更多的时钟周期有些处理器虽然支持非对齐数据访问但是会引发对齐陷阱某些处理只支持简单数据指令非对齐存取不支持复杂数据指令非对齐存取。 而我们可能需要进行类型转换、位运算、使用特定平台的指令、内存拷贝这些额外的操作取非对齐的数据而这也需要额外的指令来访问和处理这些数据也造成了不必要的开销。 35. go里面怎么样会发生死锁死锁的场景具体有哪些 我们了解一下死锁的必要条件互斥、请求与保持、不可抢占、循环等待 相互等待资源两个或多个goroutine相互持有对方需要的资源而无法释放例如goroutine A持有资源X并等待资源Y而goroutine B持有资源Y并等待资源X。未释放锁一个goroutine获取了一个锁但在释放之前就阻塞了导致其他goroutine无法获取该锁。未缓冲的通道当一个goroutine试图向一个未缓冲的通道发送数据但没有接收者时它会被阻塞这可能导致死锁。使用互斥锁的顺序问题如果多个goroutine以不同的顺序获取多个互斥锁可能会导致死锁。等待超时不处理如果goroutine在等待资源时没有设置超时或者没有处理超时情况可能会导致永久等待。 36. 内存泄漏有哪些场景怎么排查 内存泄漏是指程序在动态分配内存后由于某种原因未能释放或回收这些内存导致系统中的可用内存持续减少最终可能耗尽系统资源。 未释放资源动态分配的内存或其他资源如文件流、响应流、数据库连接等在使用完后未被释放。循环引用两个或多个对象相互引用导致它们之间形成循环引用即使程序不再需要这些对象它们也无法被垃圾回收机制回收。缓存未及时清理缓存中的对象长时间未被清理或更新导致不再需要的对象仍然占用内存。大对象未释放大对象如大型数组、大文件等在使用完后未被及时释放占用大量内存。 在go语言里面其实内存泄漏不太好排查因为gc和编辑器做的优化都太好了不怎么容易发生内存泄漏。那么如果发生了内存泄露我们可以采取以下方法 内存分析工具使用内置或第三方的内存分析工具如Go语言中的pprof工具来检测程序的内存使用情况查看内存分配情况和对象生命周期。代码审查仔细审查代码查找可能导致内存泄漏的地方例如未释放资源、循环引用等。日志和监控添加日志和监控记录程序的内存使用情况以便及时发现内存泄漏问题。压力测试进行压力测试模拟程序长时间运行观察内存使用情况是否持续增长。Heap Dump在发生内存泄漏时生成Heap Dump文件用于分析程序中的对象和内存使用情况。 37. goruntine 泄漏的场景有哪些怎么排查 Goroutine泄漏指的是创建的goroutine没有被正确释放或终止导致这些goroutine继续存在而不被使用最终可能导致系统资源的浪费影响程序的并发执行能力。 未等待goroutine完成在启动goroutine后没有正确等待goroutine执行完成导致goroutine未被正确处理而继续存在并且没有被gc回收。阻塞导致无法退出某些情况下goroutine可能会被阻塞而无法正常退出例如等待通道操作、锁操作等。循环/递归创建goroutine在循环中创建goroutine但未控制goroutine的数量和生命周期导致大量无法及时销毁的goroutine。在没有终止条件或终止条件不正确的情况下递归导致goroutine的无限增长。 排查 使用go vet工具Go提供了go vet工具可以静态分析检查代码。使用pprof工具pprof工具可以分析程序的性能和资源使用情况包括goroutine的使用情况。 预防 监控日志告警添加监控日志和告警以便及时发现异常情况。代码审查仔细审查代码特别是涉及goroutine启动和结束的地方确保每个goroutine都能被正确处理。限制goroutine数量在创建goroutine时可以考虑限制goroutine的数量比如使用协程池进行池化避免无限制地创建goroutine。 38. 进程、线程、协程有什么区别 略 39. 协程能被 kill 掉吗 不能kill 作用对象是进程是进程管理的常用命令实施对象是操作系统。 40. 那协程应该怎么处理 协程如果要实现“被kill”的效果可以使用context包进行timeout处理这样如果到了一定时间如果还没执行完就进行context cancel了。 41. 那context一般有什么信息有什么用途 42. 那如果我要 clone 一个context子context 和 父context 是一摸一样吗为什么 41、42 另外开一期讲讲context吧 43. singleflight 是什么什么时候用的 缓存失效合并请求的时候用的 44. 如果这个goruntine超时怎么办 45. doChan方法具体是怎么实现的 43-45 也单独开一期讲讲 singleflight 。 46. 为什么会有饥饿模式 互斥锁在设计上主要有两种模式 正常模式和饥饿模式。 之所以引入了饥饿模式是为了保证goroutine获取互斥锁的公平性。 所谓公平性其实就是多个goroutine在获取锁时goroutine获取锁的顺序和请求锁的顺序一致则为公平。 正常模式下所有阻塞在等待队列中的goroutine会按顺序进行锁获取当唤醒一个等待队列中的goroutine时此goroutine并不会直接获取到锁而是会和新请求锁的goroutine竞争。 通常新请求锁的goroutine更容易获取锁 这是因为新请求锁的goroutine正在占用cpu片执行大概率可以直接执行到获取到锁的逻辑饥饿模式下 新请求锁的goroutine不会进行锁获取而是加入到队列尾部阻塞等待获取锁。 47. 什么时候会让出时间片 时间片用尽当进程或线程的时间片用尽时操作系统会强制进行上下文切换将CPU资源分配给其他就绪状态的进程或线程。阻塞操作当进程或线程执行阻塞操作 如等待I/O操作完成、等待信号量、等待锁等 时它会让出CPU时间片以便其他就绪状态的进程或线程能够执行。显式让出进程或线程可以通过系统调用或特定的API显式让出CPU时间片例如在 Golang 进程会有一个全局监控协程 monitor g 的存在这个 g 会越过 p 直接与一个 m 进行绑定不断轮询对所有 p 的执行状况进行监控. 倘若发现满足抢占调度的条件则会从第三方的角度出手干预主动发起该动作。优先级调度如果有更高优先级的进程或线程需要执行当前进程或线程可能会让出时间片以便高优先级任务能够及时执行。信号处理当进程接收到信号并需要处理时它可能会让出CPU时间片来处理信号。毕竟信号也可以在多线程中传递信息。 48. IO密集型和计算密集型的区别 在计算机科学中我们通常将任务分为两类IO密集型和计算密集型。 IO密集型任务 这类任务主要涉及大量的输入/输出操作如从磁盘读取数据、网络通信、数据库查询等。在执行过程中任务会频繁地进行IO操作而不是大量的计算操作。IO密集型任务的特点是CPU通常会大部分时间处于空闲状态等待IO操作完成。因此是非阻塞的。 计算密集型任务 这类任务主要涉及大量的计算操作例如复杂的数学运算、图像处理、加密算法等。在执行过程中任务会消耗大量的CPU资源进行计算操作。计算密集型任务的特点是CPU会长时间处于繁忙状态执行大量的计算操作因此是阻塞的。 最后是几道代码题飞书文档看着代码不使用任何编辑器。 这段代码会发生什么为什么具体是怎么溢出的 var a uint 1 var b uint 2 fmt.Println(a-b) 这个uint类型的溢出我就不过多赘述了。 说出以下输出结果为什么 func TestSlicePrint(t *testing.T) {a : []byte(AAAA/BBBBB)index : bytes.IndexByte(a, /)b : a[:index]c : a[index1:]b append(b, CCC...)fmt.Println(string(a))fmt.Println(string(b))fmt.Println(string(c)) }结果 AAAACCC CCBBB AAAACCCBBB切片是对底层数组的引用因此对切片的修改会影响原始的切片。 当一个切片被用做一个append函数调用中的基础切片时 如果添加的元素数量大于此基础切片的冗余元素槽位的数量则一个新的底层内存片段将被开辟出来并用来存放结果切片的元素。 这时基础切片和结果切片不共享任何底层元素。 否则不会有底层内存片段被开辟出来。这时基础切片中的所有元素也同时属于结果切片。两个切片的元素都存放于同一个内存片段上。 这个锁是什么用的这段代码有什么问题 func TestNumPrint(t *testing.T) {wg : sync.WaitGroup{}lock : new(sync.Mutex)var a int32 0var b int32 2for i : 0; i 5; i {go func() {if a b {fmt.Println(done)return}lock.Lock()defer lock.Unlock()afmt.Printf(i: %d a: %d \n, i, a)}()}wg.Wait() }我个人觉得有三点 wg没有add(1)导致主进程结束了子进程还没开始。但这个被面试官否掉啦“你就当主进程一直阻塞就好了”这个i的变量有问题都将会是最后一个数也就是5的这个值。也被否掉了“go最新版里面这个不是问题你就当是最新版吧”还有就是这个锁有问题虽然锁住了a的自增但是没锁住a的读取int 类型本身并不是并发安全的我们必须加锁才能保证原子性那么如果我们不加锁还可以使用atomic.AddInt32() 进行原子操作。但是这里锁的粒度出现了问题锁应该是对变量的读取和修改都进行锁上面只锁住了修改锁应该要锁出一段逻辑操作而不是一个变量所以只需要将锁提到if ab的前面。 最后手撕一题整数反转。直接在飞书文档上写写的真难受… 面试官在我写的过程依次提示考虑正数、负数、正数溢出、负数溢出正数溢出和负数溢出是不是一样的 这题是全场最简单的了略具体思路就是先计算这个整数的位数然后反着来相乘再相加就好了。相加的过程中注意正数的溢出如果是负数的话做个标识让负数变正数最后再把符合加上就好了 参考资料 [1] https://www.jianshu.com/p/67600a8ddb8c [2] https://zh.m.wikipedia.org/wiki/数据结构对齐 [3] https://www.cnblogs.com/rjzheng/p/12557314.html [4] https://golang.design/under-the-hood/
http://www.zqtcl.cn/news/382764/

相关文章:

  • 包头网站建设熊掌号免费行情100个软件
  • 江门网站制作维护电子商务网站运营与管理
  • 动画网页制作网站常用的网络推广方法有
  • 一个设计网站多少钱sku电商是什么意思
  • 做网站优化有前景吗emlog和wordpress
  • 30天网站建设实录 pdf货源网站程序
  • 做企业网站需要多久培训机构 网站建设
  • 商业网站初期建设资金预算哈尔滨视频制作公司
  • 网站建设教程网哪个好wordpress 侧边栏 固定
  • 对网站主要功能界面进行赏析软件开发和app开发的区别
  • 西安市高陵区建设局网站如何重新安装电脑上的wordpress
  • 合肥网站快速优化排名全球人口多少亿
  • 中山网站关键字优化使用动易模版制作网站
  • 深圳营销网站建设报价广西住房建设厅网站
  • 爱站网appwordpress图片500
  • 北京网站排名制作图片点击就能跳转网站怎么做的
  • dw网站建设的数据库网站建设托管pfthost
  • 牛商网做网站成品网站1688入口
  • 涿鹿县建设局网站网络营销的定义和特点
  • 网站建设朋友圈怎么写深圳宝安区松岗
  • 苏州网站的建设哪个网站上做自媒体最好
  • 传送门网站是怎么做的wordpress seo标题
  • 曲靖 曲靖网站建设软件(app)开发视频一页网站怎么做
  • 互联网公司网站建设ppt模板下载wordpress 图片2m
  • 箱包官方网站模板平台开发软件
  • 佛山网站改版动漫视频制作软件
  • 易企互联网站建设创办公司需要多少资金
  • wordpress主题页脚添加联系信息百度seo优化排名软件
  • 深圳微信商城网站设计价格广东省自然资源厅事务中心
  • 云服务器做网站视屏工程建设最好的网站