自我提升之路

复习大纲:git === > CS-Note

 

数据结构与算法

       
        排序

                leetcode官网

                一个正在刷的leetcode

               时间复杂度和空间复杂度

               认识对数器

               小和问题,将此问题跟归并排序结合起来。

               荷兰国旗问题,有随机求 012210这样的组合队列,将数据进行排序实现00001111222这样的排序,桶排。

               认识排序算法的稳定性,选择排序,希尔排序,堆排,快排不稳定

               如何分析递归过程的时间复杂度,代入法,迭代法,公式法,母函数法,差分方程法,递归树法 

               冒泡排序,选择排序,插入排序,希尔排序,归并排序,堆排序,快排序,计数排序,桶排序,基数排序。排序C++版

               排序算法在工程中的应用,快排理解图

               折半查找法

      字符串

                字符串的操作

                无重复字符的最长子串

                最长回文子串

                Z 字形变换

                文本指纹,计算文本之间的相似度

                字符串匹配:KMP、 AC自动机、字典树

                Trie

                排序

                字符串的逆序

        栈stack

                      栈的link

        队列queue

                      队列link

       树

                红黑树,红黑树的删除跟增加

                B/B+ 树,引深到数据库的存储

                LSM,跟 B+树 有对比的,多路查找树

                树的遍历:前序遍历,中序遍历,后序遍历,层序遍历,递归 非递归,理解数据存储的思想, 将逻辑层结构转化为计算机层存储结构。赫夫曼树(加权路径和最小),赫夫曼编码。

                AVL,平衡二叉树  

       图

                HashMap讲解

                图的存储: 图存储1 临接矩阵,图存储2-邻接表,图存储3-十字链表,图存储4-邻接多重表,图存储5-边集数组

                图的遍历,深度遍历(类似前序遍历DFS),广度遍历(类似层序遍历BFS)

                最小生成树 ===> 普里姆(Prim)算法,MST-克鲁斯卡尔(Kruskal)算法,普利姆算法针对边多合适,克鲁斯卡尔算法针对边少合适

                最短路径   ====> 迪杰斯特拉(Dijkstra)算法, 弗洛伊德(Floyd)算法

                迪杰斯特拉算法:置一个顶点的集合s,并不断地扩充这个集合,一个顶点属于集合s当且仅当从源点到该点的路径已求出。开始时s中仅有源点,并且调整非s中点的最短路径长度(有个距离表),找当前最短路径点,将其加入到集合s,直到终点在s中

                佛洛依德算法:动态规划思想,map[i,j]:=min{map[i,k]+map[k,j],map[i,j]}

                拓扑排序 =====> AOV网-拓扑排序,AOE网-关键路径
                
                并查集,ACM入门之并查集,主要用在判断一个图中的两个顶点是否能相联通的问题,用于 克鲁斯卡尔(Kruskal)算法

                网络流
                
        散列表
                 开放定址法(线性探测法),发生了冲突就寻找下一个散列地址。

                 拉链法,将冲突的用链表连接起来
        其它
                汉诺塔,递归 回溯 循环,面积小题

                哈夫曼编码,赫夫曼编码讲解
                
       海量数据处理

            TOP-K

            海量数据判重

            海量数据排序

            MapReduce
           
      数学与逻辑

                 概率题

                 抢红包

                 洗牌

                蓄水池抽样,现在有一组数,不知道这组数的总量有多少,请描述一种算法能够在这组数据中随机抽取k个数,使得每个数被取出来的概率相等。

                Rand7,骚气肆意
                      

操作系统


        基础
            进程与线程
            进程状态
            进程调度算法
            线程实现方式
            协程
            进程同步问题
            进程通信:1.管道( pipe ):速度慢,容量有限,只有父子进程能通讯    2.有名管道 (named pipe):任何进程间都能通讯,但速度慢    3.消息队列( message queue ):容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题    4.信号量( sinal ) :不能传递复杂消息,只能用来同步    5.共享内存区( shared memory ):能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存,6.套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

            死锁:两个以上进程相互调用对方资源,互斥条件,占有和等待,不剥夺条件,环路等待条件理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。只要打破四个必要条件之一就能有效预防死锁的发生

             虚拟内存:虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

           页面置换算法:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法,最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使用(LRU)算法、最少使用(LFU)置换算法等等

            分页与分段:关联 两者都属于存储器管理方式中的离散分配方式。都要通过地址映射机构来实现地址变换。值得一提的是其中页的大小要和物理块或者页框一样,而物理块是操作系统定好了的。也就是说你的操作系统装完之后,物理块的大小是定了的,从而页的大小也是定了的。而段的长度是不定的。
引入分页存储管理方式的目的是提高内存利用率,而引入分段存储是为了满足用户(程序员)在编程和使用上多方面上的要求。还有将两者结合一起的段页式系统。

            静态链接与动态链接:一般就是编译型语言,比如C++,链接时候的选项,可以动态可以静态,道理自动百度即可。
            
        Linux

            linux知识点汇总

            linux进程状态,ps、top、pstree、netstat、wait()、waitpid()、AWK、grep、sort、uniq、tee、(管道) |、cut、tar、find、more、less、cat、tac、head、tail、link、mount、nfs、inode

            Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

            系统的安装, 常用命,内核,终端,正则,Vim,SHELL(shell编程中变量只有字符串,切记),SHELL编程,shell 中 [ "$1" = "me" ]   [  是个无比简单的命令。后面跟四个参数,[  在/usr/bin 中。所以 命令 [  跟参数 参数之间用空格。

            文件系统,一切皆文件

            编译型语言实现过程,编辑,预处理,编译,链接,运行。gcc  gdb  make  makefile  ldd  Autoconf(自动生成makefile,configure) ./configure makefile make make clean  make install

            硬链接与软链接  硬:ln 源文件 链接名  inode一样  软:ln -s 源文件 链接名 iNode不一样
           
            僵尸进程与孤儿进程


 数据库Database


     SQL(Structured Query Language) 标准化查询语句

            常见面试题

            商业级:Oracle,SQL Server,DB2,MySql

            日常使用:增删改查,标准规范,三大范式,

            mysql基础教程
          
            删除:drop、delete、truncate,连接与子查询,insert ignore into alarm_scores, 手写分组查询 group by  having

            视图:

            事务: ACID,原子性,一致性,隔离性,持久性。

            存储过程:SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

             触发器:trigger,是指事先为某张表绑定一段代码,当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行
     
            隔离级别

             封锁:行级锁以及表级锁,读写锁,意向锁

            乐观锁与悲观锁:两种常见的资源并发锁设计思路

            MVCC :多版本并发控制

            SQL 与 NoSQL

            一图学会MySQL的JOIN

            B+ 树

            索引以及优化

            查询优化,优化

            InnoDB 与 MyISAM:1) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
2) InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

            水平切分与垂直切分

            主从复制

            日志

             SQL题
    Redis:C编写而成

           redis:从数据结构探索为何如此快

            redis简单讲解:键的类型只能为字符串,值支持五种数据类型:字符串string、列表list、集合set、散列表hash、有序集合zset

            string: C语言中字符串用char[], redis对其封装了一成SDS(这个也是redis存储的最小单元)。然后再SDS基础上又封装了一层->RedisObject,里面可以指定物种数据类型,当我们 set name blog 时,redis其实会创建两个RedisObject对象, 键的RedisObject 和 值的RedisOjbect 其中它们的type=REDIS_STRING。

             list: 可用来实现任务队列,list的底层是双向链表。

             hash:在redis的这个层面,它永远只有一个键,一个值,这个键永远都是字符串对象,也就是SDS对象,而值的种类就多了,有字符串对象,有队列对象.

             set:set这个集合在redis底层是使用,你可以用object encoding查看一下便知,hashtable,哈希表。可以联想到hashmap

             zset:它在set的基础上增加了一个顺序属性,这一属性在添加修改元素时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列字段的数据表,一列存value,一列存顺序编号

            redis的事务:multi,exec

            redis15天学会

             与 Memchached 的比较

            RDB 和 AOF 持久化机制:RDB->Reids在内存中的数据库记录定时dump转存储到磁盘上的RDB持久化(fork个子进程实现)。AOF->将Reids的操作日志以追加的方式写入文件(只记录增删,只许追加文件),备份详情,RDB存储结构

            发布跟订阅:publish  subscribe

            redislive:redis监控界面 类似celery中的flower

            redis集群:集群与分布式

            主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性

            字典,跳跃表:

            redis为什么那么快,redis为什么是单线程:blog

            数据淘汰机制:6种数据淘汰策略

            线程安全问题

            缓存雪崩:缓存无法使用,忽然大批量数据集体访问数据库,跟MYSQL CPU造成大压力,使用锁或队列、设置过期标志更新缓存

            缓存击穿:缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。解决方法:把空结果也给缓存起来,这样下次同样的请求就可以直接返回空了,即可以避免当查询的值为空时引起的缓存穿透。同时也可以单独设置个缓存区域存储空值,对要查询的key进行预先校验,然后再放行给后面的正常缓存处理逻辑。

           缓存预热:缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免查询数据库然后再将数据缓存。

          redis分布式锁,mq消息机制


面向对象


      思想
            三大特性
            设计原则
     设计模式
            单例模式
            工厂模式
            MVC
            代理模式
            JDK 中常用的设计模式
    系统设计
        基础
            性能
            伸缩性
            扩展性
            可用性
            安全性
     分布式
            分布式事务
            CAP
            BASE
            Paxos
            Raft
            分布式锁
            分布式 ID
     集群
            负载均衡
            Session 管理
    缓存
            缓存特征
            LRU
            缓存位置
            CDN
            缓存问题
            一致性哈希
    攻击技术
            XSS
            CSRF
            SQL 注入
            DDoS
     消息队列,Celery 简明笔记, rabbitmq简介,docker学习笔记
            消息模型
            使用场景
            可靠性
     高并发系统
            秒杀系统
            限流算法
            服务熔断与服务降级
      服务拆分
            幂等性
            远程服务访问方法
            微服务
            SOA
      系统设计
            Web 页面请求过程
            二维码登录
            TinyURL
            KV 存储系统
            搜索引擎

网络

        简单入门:图解HTTP

        域名,网址名,URL

        圣经:unix网络编程卷
        基础
            体系结构
            以太网
            网络硬件设备
            IP 数据报
            ARP 协议
            ICMP 协议
            UDP 与 TCP
            TCP 连接
            TCP 可靠传输
            TCP 拥塞控制
            DNS
        HTTP
            GET 与 POST
            状态码
            Cookie
            缓存
            连接管理
            HTTPs
            HTTP/2
            版本比较
            HTTP 与 FTP
        Socket
            I/O 模型
            多路复用
            Java NIO


中间件


        RabbitMQ:消息队列,解耦,点对点,发布跟订阅,异步,
        ZooKeeper
        Dubbo
        Nginx


其它知识


        新技术的自学,开源项目,git,kaldi


项目

      个人项目


面试相关


        简历
        投递

========================================================================================

自我提升之路_第1张图片

你可能感兴趣的:(刷题)