面试题
盼盼编程
这个作者很懒,什么都没留下…
展开
-
算法--三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]解题思路:排序+双指针class Solution {public: vector<vecto...原创 2020-09-14 21:20:09 · 15677 阅读 · 5 评论 -
数组最大最小值比较次数优化
求数组最大值和最小值算法的比较次数O(2n),因为max和min都要数组与里面的每个元素进行比较,下面介绍一下O(1.5n)的方法,先看代码:#include <stdio.h>//求数组的最大值和最小值,要求比较次数的数量级是O(1.5n)void getMinMax(int a[],int n){ int max=0,min=0; for(int i=0;i<n;i++){ if(i+1 < n){ if(a[i] < a[i+1])...原创 2020-09-13 21:51:38 · 724 阅读 · 4 评论 -
代码的可测性
可测试性就是一个计算机程序能够被测试的容易程度。1.代码语义化2.分离独立逻辑3.分离实例状态4.分离外部服务调用符合上述条件的代码具有好的可测性原创 2020-09-01 22:00:25 · 9659 阅读 · 4 评论 -
红黑树相关概念
红黑树(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。[注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次.原创 2020-08-31 21:37:45 · 9326 阅读 · 4 评论 -
100W的单词,选择top 10
思路:随便抽出1000个数, 假设他们是最大的1000个, 然后把剩余的数往其中加, 接着在这1001个数据中淘汰最小的, 再次剩余1000个。 如此循环, 直到最后, 肯定剩下1000个, 也就是最大的1000个最小堆,是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左子节点和右子节点的值...原创 2020-08-31 21:36:53 · 9504 阅读 · 4 评论 -
缓冲区溢出以及缓冲区溢出攻击
缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量。溢出的数据覆盖在合法数据上。理想情况是,程序检查数据长度并且不允许输入超过缓冲区长度的字符串。但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患。...原创 2020-08-31 21:35:06 · 9569 阅读 · 4 评论 -
为什么要B树
磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是我们可以通过B树进行优化,提高磁盘读取时定位的效率。为什么B类树可以进行优化呢?我们可以根据B类树的特点,构造一个多阶的B类树,然后在尽量多原创 2020-08-31 21:33:58 · 9520 阅读 · 4 评论 -
如何快速查看单链表倒数第K个元素
大致思路:只需要一次遍历即可查找到倒数第k个元素。由于单链表只能从头到尾依次访问链表的各个节点,因此,如果要找到链表的倒数第k个元素的话,也只能从头到尾进行遍历查找,在查找过程中,设置两个指针,让其中一个指针比另一个指针先前移k-1步,然后两个指针同时往前移动。循环直到线性的指针值为NULL时,另一个指针所指向的位置就是所要找到的位置。...原创 2020-08-30 22:00:47 · 9731 阅读 · 4 评论 -
redis单线程架构
Redis单进程单线程架构 1、单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。 其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会进入一个队列中,然后逐个被执行。 并且多个客户端发送的命令的执行顺序是不确定的。但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。 2、单线程模型每秒万级别处理能力的原因...原创 2020-08-29 22:10:57 · 9468 阅读 · 4 评论 -
低耦合概念
一、什么是耦合度软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。 耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是原创 2020-08-29 21:52:04 · 12546 阅读 · 3 评论 -
微服务优劣
什么是微服务?它的优势和劣势?一个大型的复杂项目,由一个或 多个小型服务组成。系统中的各个小型服务可被独立部署,各个小型服务之间是松耦合的, 并且这些小型服务之间以轻量级的通信协作(http)作为基础进行通信,这样的微服务器架构 独立性更强、粒度更细、性能更高、安全性、可扩展性、可重用性都更高。简单来说:微服务,就是一个项目可以由多个小型服务构成,这里的小型服务就称之为微服务优势1.将复杂的业务拆分成多个小的业务,每个业务拆分成一个服务,将复杂的问题简单化。利于分工,降低新人的学习成本。原创 2020-08-29 21:40:29 · 9429 阅读 · 1 评论 -
常见加密算法
摘要算法:将任意长度的明文通过单向hash函数加密成固定长度的串。无论明文多长计算出来的摘要长度是固定的,明文不同密文也不同,不能从消息摘要中回复明文(md5,sha)对称加密:加密和解密都是用的同一个秘钥,加密算法公开,加密速度快(DES,AES)非对称加密:加密和解密用的不同的秘钥,A通过公钥加密数据,B通过私钥解密。非对称加密更加复杂,加密和解密速度没有对称加密快,但是相对安全(RSA)数字签名:(A生产公钥和私钥)A将明文进行摘要,然后通过私钥进行加密,然后将原明文和和密文都发送给B原创 2020-08-26 21:35:36 · 9517 阅读 · 2 评论 -
分布式基础理论
分布式系统是建立在网络之上的软件系统,分布式系统具有高度的内聚性和透明性。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。分布式系统是多个处理机通过通信线路互联而构成的松散耦合的系统。分布式系统应具有以下四个特征: (1)分布性。分布式系统由多台计算机组成,它们在地域上是分散的。整个系统的功能是分散在各个节点上实现的,因而分布式系统具有数据处理的分布性。(2)自治性。分布式系统中的各个节点都包含.原创 2020-08-24 23:26:12 · 10521 阅读 · 1 评论 -
力扣--盛水最多的容器
题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。下面看下代码:#include<iostream>#include<string>#include<vector>#include<m...原创 2020-08-22 17:28:15 · 11033 阅读 · 5 评论 -
中心扩散算法--最长回文子串
这篇看一下中心扩散算法。输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2: 输入: "cbbd"输出: "bb" 代码:#include<iostream>#include<string>#include<vector>#include<map>#include<utility>using namespace std;//最长回文子串//中心扩...原创 2020-08-20 00:07:11 · 10683 阅读 · 3 评论 -
动态规划-最长回文子串
输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb" 下面看一下代码:#include<iostream>#include<string>#include<vector>using namespace std;//最长回文子串//动态规划class Solution {public: string longestPalindrome(string s..原创 2020-08-19 23:00:55 · 10198 阅读 · 2 评论 -
哈希表--两数之和
题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 暴力解法就是用2层for循环,...原创 2020-08-19 22:21:22 · 10867 阅读 · 3 评论 -
二分查找--寻找两个有序数组的中位数
力扣---寻找两个有序数组的中位数,下面看一下题目题目叙述给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5给出代码:...原创 2020-08-18 23:54:51 · 10569 阅读 · 2 评论 -
求字符串中最长无重复子序列
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子.原创 2020-08-16 17:32:10 · 11280 阅读 · 3 评论 -
字符串的循环移动
#include#include//字符串循环右移void strMove1(char *pStr,int steps){ int n=strlen(pStr)-steps; char tmp[20]; strcpy(tmp,pStr+n);//先保存要调头的字符,因为下面前移的时候可能被覆盖 //printf("%s\n"原创 2016-05-11 11:05:51 · 10644 阅读 · 2 评论 -
单链表的排序
#includeusing namespace std;typedef struct node{ int data; struct node *next;}Node,*List;List createList(){ Node *head,*p1,*p2; p1=p2=head=new Node; int num;原创 2016-05-06 23:35:26 · 10515 阅读 · 1 评论 -
RTTI介绍
说明:部分内容来自>和RTTI百度百科。RTTI(run type identification):通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。有些读者认为设计类时使用虚函数就已经足够了,可是虚函数本身有局限性,当涉及类别阶层时,需要判断某个对象所属的类别,而因为类别设计中大量使用虚函数,所以使得这一工作难以实现,但又极其重要,于是使用RTTI的原创 2016-05-29 14:28:49 · 11333 阅读 · 1 评论 -
char溢出
学习链接:http://zhidao.baidu.com/link?url=uCJPW3GPedxRYJnI84dk9mqAWKzBQ-h6Uq1H5GqwNlgSNorqXi2qNGD7OnIFOpGZn2Kcc6xFmfZkAjMcEkK_e_说明:代码来自>#define MAX 255#includeusing namespace std;int main(){原创 2016-05-31 23:26:01 · 11147 阅读 · 1 评论 -
is null和is not null运算符
数据库某个字段的值为NULL很诡异,也经常是大家讨论的话题,所以围绕NULL的两个运算符不得不专门提一下。mysql> select * from tmp ;+------+----------+| id | name |+------+----------+| 2 | lisi || 1 | zhangsan || ...原创 2018-05-17 19:52:10 · 13455 阅读 · 3 评论 -
map使用不存在的下标
当用访问map存在的下标时,大家都指的答案。当访问不存在的下标时,又会发生什么呢?来看下#include <iostream>#include <map>#include <string>using namespace std;int main(){ map<int,string> m; m[2] =...原创 2019-02-20 19:17:51 · 12594 阅读 · 3 评论 -
赋值运算与位运算
求下面程序结果:#includeusing namespace std;int main(){ int x=2,y,z; x*=(y=z=5); cout<<x<<endl; x==(y=z); cout<<x<<endl; x=(y==z); cout<<x<<endl; x=(y&原创 2016-05-10 21:13:39 · 12599 阅读 · 4 评论