网站建设 中企动力 顺德,中国黄金建设网站,网站用户注册增加办法,哪个网站能买到做披萨的芝士正宗C #xff0c; Python 哪一个更快#xff1f;
读者答#xff1a;这个我不知道从哪方面说#xff0c;就是 C 的话#xff0c;它其实能够提供开发者非常多的权限#xff0c;就是说它能涉及到一些操作系统级别的一些操作#xff0c;速度应该挺快。然后 Python 实现功能还…C Python 哪一个更快
读者答这个我不知道从哪方面说就是 C 的话它其实能够提供开发者非常多的权限就是说它能涉及到一些操作系统级别的一些操作速度应该挺快。然后 Python 实现功能还是蛮快的。
补充
一般而言C更快一些因为它是一种编译型语言可以直接编译成机器码在执行时不需要解释器的介入因此执行效率较高。
Python是一种解释型语言需要在运行时通过解释器将代码转换为机器码来执行因此相对于C而言执行效率较低。但是Python具有很多优秀的库和框架这些库和框架可以帮助开发人员快速开发出高效的应用程序从而提高开发效率。
编译型语言和解释型语言有没有了解过
读者答可能 C 它提供的更偏机器语言一样就是只需要进行相关的编译查找就可以。但是 Python 的话它可能是更像脚本语言所以说在进行执行的时候还需要再进行嗯一方面的句子语法处理所以执行速度上会慢一些。
堆内存和栈内存有什么区别
读者答go里面的堆分配的主要是一些比较大的对象栈里面的话可能就是分配一些临时的对象或者是比较小的数据变量。然后如果分配的就是比如说如果申请了一个channel或者是一个非常大的对象的话那么它就会从默认的从栈上的空间分配到堆上因为堆上的这空堆上的空间进行分配之后它能保留的时间会更长一些这大概就是栈和堆之间的一个区别。
补充
1、管理方式不同栈内存由系统自动分配和释放而堆内存则需要程序员手动分配和释放。
2、分配方式不同栈内存是一种连续的内存空间系统会自动为每个线程分配一定大小的栈空间函数的参数和局部变量都会在栈上分配内存。而堆内存是不连续的内存空间程序员需要通过动态分配内存来获得堆内存空间。
3、大小限制不同栈内存的大小是固定的并且比堆内存小得多。程序运行时每个线程的栈空间通常只有几MB到几十MB而堆内存的大小则取决于系统的剩余内存大小和程序员的动态分配。
4、访问速度不同栈内存的访问速度比堆内存快得多因为栈内存是连续的访问局部变量和函数参数时可以直接读取栈指针的偏移量。而堆内存是不连续的访问速度较慢。
局部变量是放在堆还是放在栈里面
读者答局部变量的话因为它只在一个函数里面进行相关的生命周期的存在所以应该是在栈上面的。
链表跟数组有哪一些区别
读者答链表的长度是不固定的对它进行相关的插入或者是删除操作是非常快的。查找需要从头到尾遍历值效率低。
数组来说的话数组的话是预先分配了一段固定长度的连续的内存空间通过数组的下标索引来查找和赋值。但是如果要进行插入删除操作的话那可能会需要就是将数据中你要插入那个位置之后的所有的数组来进行挪位才能进行相关的插入操作所以说它这个插入和删除的操作就会相比链表会麻烦。
补充
可以提一下数组因为内存地址是连续可以增加cpu缓存命中率而链表的内存地址并不是连续的cpu缓存命中率会很低。
数组怎么动态扩容
读者答go 的话它其实提供了一个 slice 这样子的结构也就是说它底层维护了一个指向数组的指针然后还维护了一个数组的长度和一个它的空间预存的一个 CAP 的容量值。然后如果将这个当前的数组 space 的大小它是小于 1024 的话那基本上都是 2 倍的扩容然后如果超过 1. 2 次的大小的话基本上是 1. 25 倍的扩容。
协程与我们普通的线程有什么区别
读者答协程可以理解为用户级别的线程所以说在大小方面和调度方面都是比进程要更加的方便和简便的。
补充
1、调度方式不同线程是由操作系统调度的而协程则是由程序员控制的。当一个线程被调度时它会被操作系统挂起等待下一次调度。而协程则是由程序员在代码中主动调用的可以在不同的任务之间切换而不需要等待操作系统的调度。
2、系统资源占用不同线程是操作系统管理的实体它占用系统资源比较大包括内存、线程栈、CPU 时间片等。而协程则是在用户空间中实现的不需要操作系统的支持因此占用的资源比较少。
3、切换成本不同线程的切换需要保存和恢复线程上下文需要耗费一定的时间和资源。而协程的切换只需要保存和恢复栈帧等少量数据因此切换成本比线程低。
4、编程模型不同线程是面向操作系统的而协程是面向任务的。线程需要使用操作系统提供的 API 进行线程间通信和同步而协程则可以使用语言级别的协程库实现协作式多任务。
协程的的通讯有哪些方式
读者答不清楚go 使用时可能会配合 channel 来进行使用起一个死循环监听不同的信号量进行处理。还是说是指那个 GMP 的模型
补充
1、共享内存协程通过共享内存来交换数据这种方式简单直接但需要考虑同步和互斥问题否则会出现数据竞争等问题。
2、消息传递协程通过消息队列等方式来传递数据这种方式可以避免数据竞争等问题但需要考虑消息的发送和接收顺序等问题。
3、信号量协程通过信号量等方式来实现同步和互斥这种方式需要考虑好信号量的数量和使用顺序否则会出现死锁等问题。
常规的多线程开发需要注意哪一些问题
读者答场景考虑你这个线程是不可以就是无限制的创建的吗而且创建线程是需要开销的所以一般是会使用线程池这样的方式先预先创建好一些已经分配好的线程资源然后有需要用的话就先进行相关的使用然后这个线程池也负责了一些GC 的处理。
线程池里面大概要开多少的线程数量这个线程数量的话就会跟你的任务相关。CPU 密集型根据CPU 的核数或者和任务执行的有关的时间来进行这个线程数量的考虑。
读写共享变量会遇到什么问题
读者答并发访问
什么是死锁
读者答两个或多个进程之间他们都在等待一些资源然后没有办法完全释放现在已经占有的资源但是他们需要的资源的话又被其他的进程所占有着同时这一整个过程中你又没有办法去抢占造成了一个循环等待的情况请求保持互斥不可剥夺循环等待
如何避免出现死锁怎么排查
读者答加锁或者channel打断点加日志信息。
补充
避免死锁
按照固定的顺序获取锁按照固定的顺序获取锁可以避免死锁的发生。例如如果A线程先获取了锁1再获取锁2那么B线程就应该先获取锁2再获取锁1。
设置超时时间在获取锁的过程中可以设置超时时间如果超过一定时间还没有获取到锁就放弃获取锁避免因等待锁而导致的死锁。
排查方式
使用工具可以使用一些工具来帮助检测和定位死锁问题例如jstack和jconsole等。
分析日志可以分析系统日志和线程日志查看是否有线程在等待某个锁从而找出可能导致死锁的原因。
代码检查可以检查代码中是否存在多个线程竞争同一个锁的情况是否存在锁的嵌套等问题从而找出可能导致死锁的原因。
密码学和计网
用到过哪些加密算法
读者答
Sha256 或者是 MD5 这样子的加密算法。不能还原成原来的数据用来比较数据是否一致。
对称和非对称的加密算法RSA
补充
1、对称加密算法如DES、3DES、AES等使用相同的秘钥加密和解密数据加解密速度快但秘钥管理困难。
2、非对称加密算法如RSA、ECC等使用公钥加密数据私钥解密数据安全性高但加解密速度较慢。
3、哈希算法如MD5、SHA-1、SHA-256等将任意长度的数据映射成固定长度的哈希值不可逆、不可篡改主要用于数据完整性校验。
4、消息认证码MAC如HMAC、CMAC等将消息和秘钥混合处理生成固定长度的认证码用于防止数据被篡改。
5、数字签名算法如RSA、DSA等将消息和私钥混合处理生成数字签名用于验证消息的来源和完整性。
对称和非对称的加密算法的区别具体讲讲非对称
读者答对称的话它是有一个公钥和一个私钥的然后私钥的话是只有自己持有的这样子的话那他别人其实不会获取到你的CL然后你通过一个嗯可信的第三方来进行相关的妙加密。这样子的话别人只需要通过你的公钥来进行一下获取你的公钥来进行你传输内容的加解密就可以然后来保证这样子的一个数据的安全性。
HTTP和HTTPS有什么区别
读者答因为HTTP是明文传输的然后 HTTPS 的话就是在这样的基础上增加SSL的一些加密的保护来保证它传输消息的安全性。
补充
HTTP 是超文本传输协议信息是明文传输存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议使得报文能够加密传输。
HTTP 连接建立相对简单 TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后还需进行 SSL/TLS 的握手过程才可进入加密报文传输。
两者的默认端口不一样HTTP 默认端口号是 80HTTPS 默认端口号是 443。
HTTPS 协议需要向 CA证书权威机构申请数字证书来保证服务器的身份是可信的。
怎么去使用这些加密算法
读者答混合使用对称和非对称加密算法会话密钥是对称的获取的过程是非对称的。
补充
通过混合加密的方式可以保证信息的机密性解决了窃听的风险。 混合加密 HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式
在通信建立前采用非对称加密的方式交换「会话秘钥」后续就不再使用非对称加密。
在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
采用「混合加密」的方式的原因
对称加密只使用一个密钥运算速度快密钥必须保密无法做到安全的密钥交换。
非对称加密使用两个密钥公钥和私钥公钥可以任意分发而私钥保密解决了密钥交换问题但速度慢。
TCP 跟 UDP有什么区别
读者答TCP 的话它提供了一系列的可靠传输机制来保证它这个传输是可靠的相较而言的话那它的传输速度就是慢的而UDP 的话它没有做这个可靠的控制它只是尽力而为所以说它的传输速度是快的而且占用的资源也会更小一些。具体使用的话要看不同的那个业务场景来进行相关的使用。
UDP 怎么改造变为可靠传输
读者答应用层加序列号和ACK。然后本地会缓存一些自己已经发过的消息然后同时也要求对方在收到消息之后返回 ACK 来确认这个消息已经收到如果没有收到 ACK 的话可能会设置一些定时重传的这样的一些方式来确保这个消息能够成功的发送到对方。
补充
还要在应用层实现滑动窗口实现流量控制根据接收方的接收能力才发送数据还有拥塞控制当网络中有大量数据包同时传输时会导致网络拥塞从而影响数据传输的质量和效率。TCP拥塞控制通过动态调整数据传输速率避免了网络拥塞的发生从而保证了数据传输的可靠性和高效性。
数据库
MySQL常见的性能优化方式
读者答索引和分库分表
加了索引之后插入速度跟那个读的速度有什么区别
读者答b 树索引结构它其实跟实际的磁盘结构是比较一致的使得随机写变成相关的顺序写插入速度变快的。将所有的数据结数据信息的话都存在叶子节点能够提高范围查找的速度。
Redis在架构中会起到什么作用
读者答当缓存使用的
可以直接存到进程内存现在为什么要专门做Redis
读者答因为Redis快面试官说不是因为还存在进程通讯不如直接内存快自己去实现一份缓存不一定有Redis好在分布式架构中Redis能做同步