- 博客(88)
- 资源 (28)
- 收藏
- 关注
原创 计算机网络和操作系统面试题
1. TCP三次握手第一次握手:客户端TCP进程也先建立传输控制块TCB,然后向服务端发送连接请求报文段,此时SYN=1,随机选定一个初始序号seq=x,,此报文不能携带数据,但是要消耗掉一个序号,发送完毕后,客户端进入SYN-SENT(同步已发送)状态第二次握手:服务端收到客户端请求连接报文段后,若同意建立连接,则发送确认报文,确认报文中SYN=1、ACK=1,确认号ack=x+1,同时随机选定一个自己序号seq=y,确认报文段同样不能携带数据,但是也要消耗掉一个序号,发送完毕后服务端进入SYN-RC
2022-02-25 20:04:32 766
原创 吴恩达深度学习:从logistic回归到深层神经网络
注意:这篇文章需要有logistic回归基础,可以参考我的这一篇文章吴恩达机器学习:从单变量线性回归到Logistic回归1. 神经网络概念首先我们要了解神经网络的形式,之所以被叫做神经网络,是因为它的工作原理和人的大脑神经相似。这是一个房屋预测的案例,我们输入房屋的大小,卧室的个数,邮政编码,财富,经过神经元的一系列计算,得到预测值price(房屋的价格)1. 前向传播和反向传播1.1. 前向传播假设我们有个神经网络,有这样一个代价函数J(a,b,c)=3(a+bc)=3(5+3×2.
2022-02-16 17:35:43 511
原创 机器学习:从决策树到xgboost
1. 决策树1.1. 决策树的定义决策树,顾名思义是用来做决策的,当我们决定一件事情要不要做的时候,会有很多条件。举个例子,我们决定明天要不要去打高尔夫,那么我们会考虑到明天的天气,温度等情况。这里的天气和温度就是特征,是否去打高尔夫就是类别标签。我简单画个图决策树的学习过程包括:特征选择、决策树生成、决策树剪枝。下面我将围绕这些过程讲解1.2. ID3算法这里要引入一些概念数据集的信息熵,信息熵反映了一个数据集的纯度,信息熵越大,样本纯度越低,不确定性越大。信息熵的计算公式条件熵,在
2021-12-30 20:22:43 1541
原创 MySQL面试题整合
1. MySQL索引的底层数据结构是?为什么要设计索引?答:加快数据的查询效率设计索引的时候,使用什么数据结构,为什么?答:B+树问:为什么?哈希表也能存储,但是补充:扰动函数,让高位尽可能参与哈希值的运算,让数据更加散列二叉树和红黑树也能存储,但是缺点:深度太深,会频繁地在磁盘和内存间io,影响读取效率B树也可以存储,但是一个磁盘块的空间有限,data的存在会浪费空间,所以我们只用叶子节点来存数据,这样就构成了B+树。B+树:非叶子节点只负责搜索,这样存储的数
2021-09-24 09:41:15 455
原创 深入理解kafka
1. kafka架构1)Producer :消息生产者,就是向 kafka broker 发消息的客户端;2)Consumer :消息消费者,向 kafka broker 取消息的客户端;3)Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。4)Broker :一台 kafka 服务器就是一个 broke
2021-09-22 12:01:11 320
原创 深入理解spark
1. 结构spark是标准的主从结构,在yarn模式下,是由resourceManager负责调度,当一个任务提交的时候,会开启一个Driver,Driver会分配资源,划分任务,再向rm申请节点,节点过来后,在节点中开辟Executor,执行每一块任务。DriverSpark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。Driver 在 Spark 作业执行时主要负责:➢ 将用户程序转化为作业(job) ➢ 在 Executor 之间调度任务(task)
2021-09-21 15:38:14 464
原创 深入理解Flume
1. Flume是干什么的flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,简单来说flume就是收集日志的Flume是用来监控,收集日志的。2. Flume架构flume之所以这么神奇,是源于它自身的一个设计,这个设计就是agent,agent本身是一个Java进程,运行在日志收集节点—所谓日志收集节点就是服务器节点。agent里面包含3个核心的组件:source—->channel—–>sink,类似生产者、仓库、消费者的架构。source:是
2021-09-15 16:32:36 150
原创 深入理解HBase
1. HBase概念HBase是基于Hadoop的非关系型数据库特点a.可以对海量数据进行随机,实时的读写操作b.可以存储海量数据:数十亿行 X 数百万列c.数据存储比较稀疏d.数据类型比较单一e.速度快在数据量非常巨大的情况下,没有那么慢2. 数据存储形式表(table)存储数据的基本单位列族(columnFamily)具有类似含义的列的集合,列属于哪个列族由行决定列(column)某个列族下的一个具体列行键(rowkey)代表当前行的唯一标识,独立于表中的任何字段
2021-09-09 19:26:11 345
原创 深入理解Hive
1. 数据库和数据仓库的区别数据库:真正存储和管理数据的,对数据有直接的处置权关心的事情是 在线事务过程(OLTP)数据仓库:可以利用一个或多个数据库的数据,进行数据分析。关心的事情是 在线分析过程(OLAP)2. hive运行原理写sql语句,hive内部自动转成MapReduce程序执行。原数据在hdfs上,sql语句需要使用表。表是以目录形式存在hdfs的某个指定位置(warehouse)可以通过数据加载的形式,把hdfs或本地的原数据加载到表(目录)中表里的数据实际上是存
2021-08-15 20:57:26 222
原创 深入理解zookeeper
1. 什么是zookeeperzookeeper是一个独立的分布式框架zookeeper = 文件系统 + 监听同步机制2. zookeeper的文件系统zookeeper中存在一个小型的文件系统。作用:存大家都关心的数据存在形式:树形结构存在,每个节点都是一个znode默认只有一个根节点(zookeeper)随着数据的增加,会不断壮大数据的存在形式:在每个znode上以键值对的形式存在key:znode的名字 value:具体存储的内容3. zookeeper选举机制
2021-08-03 13:21:08 216
原创 yarn运行机制
1. yarn的角色分配resourceManager所有节点资源管理的领导者,全局只有一个。NodeManager每个DataNode节点都存在的管理当前节点的管理者ApplicationMaster对于写好的代码进行任务的划分container容器,是一个抽象的概念。对集群中所有节点的资源进行重新分配,按照任务所需划分资源。2. 理解container从上图可以发现,container正是实现了集群对比单个机器的优势,就算job执行的要求比每一个单个机器配置更高,conta
2021-08-03 13:09:44 351
原创 深入理解Mapreduce(shuffle机制、数据倾斜、切片机制)
1. MapReduce介绍map:映射(键值对) 最小化数据单元,把每个单元以键值对的形式发送到下一个环节reduce:减少,合并。把map端送过来的最小化数据,按照key相同,value值做运算map阶段输出数据的形式:(key,value)---------------- shuffle机制 -----------------------------reduce阶段接收形式:(key,(value,value,value))注意:map读取数据是按行读取,key是偏移量,value是每一行
2021-08-02 17:06:08 293
原创 Java面试题(十):ReentrantLock底层原理
1. 可重入锁ReentrantLock翻译过来其实就是可重入锁,那么什么是可重入锁?简单来说,就是一把锁重复使用。以下就是一个可重入锁的机制,lock1.lock()已经获取到了lock1对象的锁,那么while里的lock1.lock()可以自动备货区,一把锁重复使用。这样的好处是什么?答:避免堵塞,提高效率,我们接下来解释一下为什么有这两个好处。避免堵塞:lock1.lock()获取lock1对象的锁,while1中的lock1.lock()也是尝试获取lock1对象的锁,但是lock
2021-07-17 10:36:32 1218 1
原创 深入理解HDFS
1. 文件块HDFS上的文件是分块存储的,默认每一块是128M,若一个文件是150M,那么它会被分成两个块存储,一个128M,一个22M。1.1. 为什么会有这样的规则呢?试想,当一个文件的大小为1T,计算机查找到它的时间是1s,但是读取它的世界可能就远远大于1s,这让文件的读取效率变得特别的低。为此,我们有一个规则:找到文件的时间 = 读取文件的时间*1%换言之,找到文件需要1s,读取文件需要100s,这个时间比例是比较合适的而目前磁盘的传输速率普遍是100M/s,经过计算,128M的块大
2021-07-16 15:18:25 164
原创 (经典栈类问题)leetcode:150逆波兰表达式求值
1. 后缀表达式求值后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下:遍历表达式,遇到的数字首先放入栈中,此时栈如下所示:接着读到“+”,则弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。读到8,将其直接放入栈中。读到“”,弹出8和5,执行85,并将结果40压入栈中。而后过程类似,读到“+”,将40和5弹出,将40+5的结果45压入栈…以此类推。最后求的值288。2.
2021-06-25 14:00:15 98
原创 Java面试题(九):synchronized
1. 对象信息的存储对象的信息实际上是存在与堆中的,而方法区中则是存类的信息。为什么非要8的整数倍?答:可以保证内存的利用率1.1. 对象头中MarkWord偏向锁:只有一个线程能用(专用)当对象使用过hashCode方法的时候不能产生偏向锁,直接产生轻量级锁。2. synchronized锁升级2.1. 偏向锁升级为轻量级锁当是单线程的时候,偏向锁只能由一个线程使用,而当再增加一个线程的时候,偏向锁会向轻量级锁升级2.2. 轻量级锁升级为重量级锁当自旋时间超时,就会变
2021-06-17 23:00:59 431
原创 Java面试题(八):JVM
1. 内存结构程序计数器虚拟机栈本地方法栈堆方法区1.1. 程序计数器1.1. 作用程序计数器的作用就是在指令执行的过程中,记住下一条指令的执行地址。二进制字节码前面的数字就恶意看作是内存地址当getstatic命令被解释器拿到的时候,程序计数器会记录下一条指令的地址,也就是astore_1的地址3,下一次解释器就是从程序计数器里拿到下一条指令的地址3,以此类推。程序计数器的物理上是由寄存器实现的,寄存器是cpu里读取速度最快的单元。1.2. 特点线程私有:每个线程都
2021-06-17 19:23:05 544 6
原创 Java面试题(七):集合类面试题
HashMap面试题1. HashMap1.1. 哈希值、哈希表、哈希函数哈希值:通过一定的散列算法,把一个不固定长度的输入,转换为固定长度的输出,结果我们称之为哈希值(hash)。map中,hash就是一个int值。在JDK1.7之前,HashMap采用数组+链表的形式存储数据,查找的时候,先通过hashCode查找数组下标,要是数组下标的位置有链表,那就再遍历链表通过equals方法查找,要是hash冲突很严重(链表很长),这样是很耗时的。1.2. HashMap的长度问:Hash
2021-06-16 17:58:43 2789 1
原创 Java面试题(六):线程池(原理)
1. 线程池的优点线程池的底层是阻塞队列2. 三种线程池这三种线程池的底层都是用ThreadPoolExecutor和阻塞队列(BlockingQueue)实现的,例如newCachedThreadPool的底层3. 线程池七大参数我们点开底层代码,发现线程池实现其实是有七大参数,那为什么上面只有五大参数呢?3.1 corePoolSize(今日当值线程)4. 线程池底层工作原理要是5个线程都满了,阻塞队列也满了,那么就到了第4步,开启拒绝策略,拒绝策略分为四种。要是第4步
2021-06-08 17:03:41 1227
原创 Java面试题(五):多种锁和阻塞队列
1. 悲观锁和乐观锁1.1. 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS算法,Java原子类中的递增操作就通过CAS自旋实现的。CAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.conc
2021-06-07 17:39:37 287 2
原创 Java面试题(四):JUC
1. 闭锁CountDownLatch有些操作,是要等其它线程的计算全部完成才能执行,这就是闭锁。为此,JUC提供了CountDownLatch,传入一个整数,在其它线程里可以使这个整数减1,当这个整数为0的时候,对应的操作才会执行。2. Callable创建执行线程我们熟知的创建执行线程的方式有两种:继承Thread类实现Runnable方法其实创建执行线程,有四种方法,这里介绍第三种:实现Callable接口,它与Runnable接口有一定的区别。3. 同步锁(Lock)解决线
2021-06-04 18:54:43 601 1
原创 Java面试题(三)集合类线程不安全
1. ArrayList线程不安全1.1. 面试题我们知道ArrayList是线程不安全的,那么请写出一个案例,证明ArrayList的线程不安全。首先明白什么是线程不安全,其实在多个线程同时写入同一个ArrayList中的时候,会报错,这个错误叫并发修改异常。所以这道题很简单,我们创建一个ArrayList对象,再创建多个线程,这些线程全部调用这个对象的add方法,就会报错。1.2. 如何解决并发修改异常?方法1:将ArrayList换成Vector,Vector的add方法是加有syn
2021-06-03 18:58:28 250 2
原创 Java面试题(二)JMM,volatile,CAS
1. JMM主内存:共享区域,就是内存条工作内存:每个线程的内存,是线程独有的。JMM的性质:可见性原子性有序性JMM规范是大多数并发编程所要遵守的规范。可见性:当其中一个线程对共享变量完成更改的时候,那么其它线程就会第一时间更新自己的共享变量的副本(及时通知)。......
2021-06-02 19:57:19 283 4
原创 Java基础高频面试题(一):对象的创建
1. 题目描述写一个Father类写一个Son类继承Father问题:这段代码的运行结果是什么?2. 考点这道题的考点有三个类初始化过程一个类要创建实例需要先加载并初始化该类main方法所在的类需要先初始化一个子类要初始化,必须先初始化父类一个类初始化就是执行< clinit>()方法< clinit>()方法由静态类变量显示赋值代码和静态代码块组成类变量显示赋值代码和静态代码块代码从上到下顺序执行< clinit>()方法只执
2021-05-26 17:53:14 161
原创 快速排序java实现
import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int[] arr = {5,3,6,8,9,4,2}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } public static int
2021-05-18 20:55:18 52
原创 归并排序java实现
public class Merge { public static void main(String[] args) { int[] arr = {1,3,5,2,4,6,6,5,1,2,3}; mergeSort(arr, 0, arr.length - 1); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
2021-05-18 18:19:50 59
原创 Hadoop和yarn面试题(详解)
Hadoop优化有哪些方面列出正常工作的hadoop集群中hadoop都分别启动哪些进程以及他们的作用Hadoop总job和Tasks之间的区别是什么?Hadoop高可用HA模式简要描述安装配置一个hadoop集群的步骤fsimage和edit的区别yarn的三大调度策略hadoop的shell命令用的多吗?,说出一些常用的用mr实现用户pv的top10?1. Hadoop优化有哪些方面0)HDFS 小文件影响(1)影响 NameNode 的寿命,因为文件元数据存储在 Nam..
2021-05-10 17:43:36 378
原创 MapReduce面试题(详解)
Mapreduce 的 map 数量 和 reduce 数量是由什么决定的 ,怎么配置map数量是由任务提交时,传来的切片信息决定的,切片有多少,map数量就有多少科普:什么是切片?切片的数量怎么决定?举例:输入路径中有两个文件,a.txt(130M),b.txt(1M),切片是一块128M,但是不会跨越文件,每个文件单独切片,所以这个路径提交之后获得的切片数量是3,大小分别是128M,2M,1Mreduce的数量是可以自己设置的...
2021-05-10 17:33:34 2388
原创 HDFS面试题(详解)
本文会对HDFS常见面试题进行详解,并且后续持续更新本次内容:1.hdfs写流程2.hdfs读流程3.hdfs的体系结构4.一个datanode 宕机,怎么一个流程恢复5.hadoop 的 namenode 宕机,怎么解决6.namenode对元数据的管理、7. namenode工作原理1. hdfs写流程(必背)我们来看一下这张图片,步骤都有序号,看五分钟肯定能看会,理解记忆就行了1)客户端通过DistributedFileSystem模块向NameNode请求上传.
2021-05-07 11:23:18 906
原创 Flink的常用算子以及实例(详解)
1. map特性:接收一个数据,经过处理之后,就返回一个数据1.1. 源码分析我们来看看map的源码map需要接收一个MapFunction<T,R>的对象,其中泛型T表示传入的数据类型,R表示经过处理之后输出的数据类型我们继续往下点,看看MapFunction<T,R>的源码这是一个接口,那么在代码中,我们就需要实现这个接口1.2. 案例那么我们现在要实现一个功能,就是从给一个文件中读取数据,返回每一行的字符串长度。我们要读取的文件内容如下代码贴在这
2021-04-23 16:46:31 3738
原创 线性代数学习(二):向量
学习物理的人喜欢把向量叫做向量学习数学的人喜欢把向量叫做矢量我们要知道的是:向量 = 矢量1. 矢量(向量)的基本概念矢量:既有方向又有长度的量交矢量标量:只有长度,没有方向的量,叫标量1.1. 矢量的加法1.3. 向量加法深入理解从上图发现,我们只要不改变向量的长度和方向,在平面内随意平移那个向量,向量是不变的。我们以一个向量的加法为例其实在图上反映出向量的加法就是这样的1.4. 向量的乘法和零向量的定义1.5. 向量乘法深入理解先举出第一个例子当c = -1的
2021-04-17 15:35:53 2096
原创 线性代数学习(一):大致矩阵介绍
1. 矩阵矩阵的相加,相减以及矩阵乘以常数都很好理解,但是矩阵乘以矩阵就不太好理解了。1.1. 矩阵 × 矩阵第一个矩阵的每一行乘以第二个矩阵的每一列,对应位置就是值。A(2,2) * B(2,2) = CA的第一行乘以B的第一列,就是C的第一行第一列的值,A的第二行乘以B的第二列就是C的第二行第二列的值,在矩阵的乘法中,都是整行整列的乘写两个题练手:注意:矩阵的乘法不符合交换律2.2. 矩阵的逆2.2.1. 单位矩阵由上图可知,单位矩阵就是对角线为1,其余位置都是0的矩阵就是
2021-04-17 12:05:25 238
原创 leetcode题目:5.最长回文字符串
1. 题目分析这道题有一个新的思想,解决这类题型都可以用到,那就是中心扩散法,在这里给出一篇很好的文章,通俗易懂。中心扩散法2. 代码实现2.1. Python代码class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ start,maxlen = 0,0 for i in
2021-04-16 20:14:48 61
原创 leetcode题目27&&283:双指针思想
这一讲呢,我们主要是要将双指针思想讲明白,因为我发现双指针思想灵活方便,而且可以应用到leetcode很多热门题,可以用在很多地方。1. leetcode:27(双指针解法)1.1. 题目分析这道题刚开始我的想法太过简单,用一个指针遍历,遇见相同的就直接删掉,往前移动,但是这样你会发现,数组的长度在不断变换,那个指针的阈值根本没办法确定,自然而然我们就能想到另一个方法----双指针法。基本思想:用覆盖的思想,准备两个指针 i 和 j ,这里我们直接给出图解。最后,0-i上的值就是我们想
2021-04-16 18:49:31 72
原创 leetcode题目:3. 无重复字符的最长子串
1. 题目分析基本思路:指针指向第一个元素,之后创建一个空数组lst遍历字符串,每遍历一个,就放入lst中,直到发现锁遍历的这个元素在lst中存在为止删除lst中0-a的所有元素,当然这里只有a继续操作,直到字符串遍历完成2. 代码实现2.1. Python代码class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rt
2021-04-13 19:59:46 54
原创 leetcode题目:2. 两数相加
1. 题目分析这个题目的意思很明显,我们可以将上述链表分为以下三种情况。长度相等,但是最后一位相加不大于10。长度相等,最后一位相加大于10。长度不相等。第一种情况,按顺序简单相加即可第二种情况可以发现,6和4相加大于10,也就是说,我们需要在原基础上再增加一个节点存放1。第三种情况这个时候就需要我们判断,是谁先遍历完成。基本思路:设置变量n = 0,当两个节点相加大于10等于的时候,将n赋值为1,若小于10,则赋值为0,当下一对节点相加的时候,直接带上n就
2021-04-13 18:33:01 71
原创 统计学习方法啃书指导(二):感知机模型
1. 感知机模型在机器学习中的地位首先很明确的是,感知机是机器学习中最原始的一个算法,性能很差,效果很差,但是在机器学习发展的历史长河上,这个算法功不可没。之后的所有算法,都是在它的基础上提出的,或多或少优化了它的很多缺陷,所以我们要了解这个算法。2. 引例红豆和绿豆在一个盘子里,当我们放入一个豆子的时候,我们需要让盘子自动将它归类(红豆或绿豆),以下就这个盘子可以看到,黄色的线和紫色的线都是好的直线,但是红色的线,并没有将其完全分开。试想:要是我们无法选择一根好的直线,那么我们是不是就要在
2021-04-13 16:07:35 126
原创 leetcode题目:406. 根据身高重建队列(贪心算法)
1. 题目分析本题有两个维度,h和k,看到这种题目一定要想如何确定一个维度,然后在按照另一个维度重新排列。我们不能h和k一起考虑,这样会顾此失彼,我们必须先确定一个维度,h或者k。如果按照k来从小到大排序,排完之后,会发现k的排列并不符合条件,身高也不符合条件,两个维度哪一个都没确定下来。思路:按照k从高到底排序,这样前面的k一定高于后面的,在重新创建一个队列,遍历排序后的数组,再重新插入就行了。我们拿第一个样例来说排序完的people:[[7,0], [7,1], [6,1],
2021-04-13 15:40:02 105
C/C++:运动会分数统计问题.rar(含注释)
2021-03-04
C/C++:符串排序.rar(含完整注释)
2021-03-04
C/C++:二叉排序树.rar(含完整注释)
2021-03-04
C/C++:一元多项式的表示及其运算.rar(含注释)
2021-03-04
C/C++:八皇后问题.rar(含完整注释)
2021-03-04
C/C++:二叉排序树中的最小结点和最大结点.rar(含完整注释)
2021-03-04
C/C++:算术表达式求值问题.rar(含完整注释)
2021-03-04
C++:马踏棋盘问题(非递归)(含完整注释).rar
2021-03-04
C/C++:任意长的整数加法.rar(含完整注释)
2021-03-04
C/C++:敢死队问题求解.rar(含完整注释)
2021-03-04
C/C++:小球下落问题求解.rar(含完整注释)
2021-03-04
C/C++:简单书目管理系统.rar(含完整注释)
2021-03-04
C/C++:哈夫曼编译码器.rar(含完整注释)
2021-03-04
C/C++:宿舍管理查询软件的设计.rar(含完整注释)
2021-03-04
C/C++:二叉树的非递归遍历及其他操作(含完整注释)
2021-01-10
C语言:学生信息管理系统(含完整注释)
2021-01-09
C语言:基于散列表的电话号码查询系统(含完整注释)
2021-01-08
C语言:航空客运订票系统的设计(含完整注释)_飞机订票系统设计C语言
2021-01-08
C语言:基于哈希表的姓名查找(含完整注释)
2021-01-08
C语言:模拟计算机器程序(含完整注释)_计算机二级c语言难吗
2021-01-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人