• 递归:如何用三行代码找到“最终推荐人”?

    推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多 App 都有这个功能。这个功能中,用户 A 推荐用户 B 来注册,用户 B 又推荐了用户 C 来注册。我们可以说,用户 C 的“最终推荐人”为用户 A,用户 B 的“最终推荐人”也为用户 A,而用户 A 没有“最终推荐人”。一般来说,我们会通过数据库来记录这种推荐关系。在数据库表中,我们可以记录两行数据,其中 actor_id 表示用户 id,referrer_id 表示推荐人 id。为什么使用递归?递归的优缺点?优点:代码的表达力很强,写起来简洁。缺点:空间复杂度高、有堆栈溢出风险、存在重复计算、过多的函数调用会耗时较多等问题。关于走楼梯

    计算机原理 59 人阅读 0 条评论
  • 栈stack 三种含义是什么?是哪三种含义?

    栈stack 这个词有三种含义,适用于不同场合,必须需要明确区分。第一种含义:数据结果stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。在这种数据结构中,数据像积木那样一层层堆起来,后面加入的数据就放在最上层。使用的时候,最上层的数据第一个被用掉,这就叫做"后进先出"。与这种结构配套的,是一些特定的方法,主要为下面这些。push:在最顶层加入数据。pop:返回并移除最顶层的数据。top:返回最顶层数据的值,但不移除它。isempty:返回一个布尔值,表示当前stack是否为空栈。第二种含义:代码运行方式

    计算机原理 54 人阅读 0 条评论
  • 如何使用栈来浏览器的前进和后退功能?

    栈是什么?堆栈(英语:stack)又称为栈或堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。

    计算机原理 78 人阅读 1 条评论
  • 链表(下):如何轻松写出正确的链表代码?

    第一:理解指针或引用的含义有些语言有“指针”的概念,比如 C 语言;有些语言没有指针,取而代之的是“引用”,比如 Java、Python。不管是“指针”还是“引用”,实际上,它们的意思都是一样的,都是存储所指对象的内存地址。什么是指针:将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。第二:警惕指针丢失和内存泄漏对于有些语言来说,比如 C 语言,内存管理是由程序员负责的,如果没有手动释放结点对应的内存空间,就会产生内存泄露。所以,我们插入结点时,一定要注意操作的顺序,要先将结点 x 的 next

    计算机原理 82 人阅读 0 条评论
  • 如何实现LRU缓存淘汰算法?

    什么是缓存?缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。什么是缓存淘汰策略?指的是当缓存被用满时清理数据的优先顺序。缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。常见3种缓存淘汰策略先进先出策略 FIFO(First In,First Out)最少使用策略 LFU(Least Frequently Used)最近最少使用策略 LRU(Least Recent

    计算机原理 95 人阅读 0 条评论
  • 链表是什么?有多少种链表?时间复杂度是?

    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数

    计算机原理 92 人阅读 0 条评论
  • 网络编程面试题

    HTTP, HTTPS协议:什么是DNSHTTP协议怎么抓取HTTPS协议说出请求接口中常见的返回状态码http协议请求方式HTTP和HTTPS协议区别HTTP和HTTPS实现机有什么不同POST和GET的区别HTTP请求报文与响应报文格式什么是Http协议无状态协议?怎么解决HTTP协议无状态协议常见的POST提交数据方式HTTP请求报文与响应报文格式HTTP协议学了哪几个版本Session和Cookies区别HTTPS在哪一层, 会话层在第几层浏览器输入url按回车背后经历了哪些?TCP, UDP协议:TCP/UDP协议的区别,TCP如何保证正确,微信基于什么协议,QQ基于什么协议,为什么

    计算机原理 96 人阅读 0 条评论
  • 数组是如何随机访问元素?数组下标为什么从0开始,而不是1?

    数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。从以下几个角度理解数组:什么是线性表(Linear List)?线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。例如:数组,链表、队列、栈等都是线性表结构。什么是非线性表?非线性是因为,在非线性表中,数据之间并不是简单的前后关系。比如二叉树、堆、图第二个是连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”。但有利就有弊,这两

    计算机原理 106 人阅读 0 条评论
  • 今日头条(字节跳动)javja 面试题

    # 字节跳动技术一面面问的都还比较基础,答得也还算顺利* 说下你的实习项目吧* 讲一下线程参数的含义* Innodb的索引实现* 为什么是B+树?* Redis的使用,分布式锁的实现* 操作系统虚拟内存换页的过程* TCP三次握手* volatile关键字的作用* 乐观锁、悲观锁* HashMap结构,是否线程安全?ConcurrentHashMap如何保证线程安全?* 之前用过哪些设计模式?* 算法题:滑动窗口# 字节跳动技术二面发现字节的面试官都挺年轻的,头发也没怎么秃,哈哈~*&

    计算机原理 156 人阅读 0 条评论
  • 算法复杂度分析是什么?为什么需要复杂度分析?如何进行复杂度分析?

    算法复杂度是什么?算法复杂度是指算法在编写可执行程序后,运行时所需要的资源,资源包括时间资源和空间资源。数据结构和算法本身解决是“快”(让程序更加快运行)和“省”(让代码省存储空间)的问题,因此,判断算法一个非常重要的考量指标——执行效率。如何来评估算法代码的执行效率,就需要算法复杂度分析(时间和空间复杂度分析)算法复杂分析不需要加载实际的数据运行程序,而是通过代码层面估计它运行的时间资源和消耗空间资源。算法复杂度分析是整个算法的基础,只有掌握它,数据结构和算法的内容基本上掌握了一半。总结:数据结构和算法解决是“如何让程序花更少的时间,更少的资源来解决问题”算法复杂度由程序执行时间和占用资源这

    计算机原理 98 人阅读 0 条评论