自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Cesium构造飞机2D/3D可视化展示开发日志

https://www.bilibili.com/video/BV1ku411B7Ky

2022-03-12 15:57:28 555

原创 Kafka的理解

      Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。架构图:kafka角色:1.Producer:消息生产者,向Kafka broker发消息的客户端。2.Consumer:消息消费者,向Kafka broker获取消息的客户端。3.Consumer Group(CG):消费者组,由多个consumer组成,消费者组内每个消费者负责消费不同的分区的数据,一个分区

2022-04-18 16:12:57 2574

原创 CDN的理解

CDN(Content Delivery Network)内容分发网络。       网站应用,静态资源占流量的多数。系统做了动静分离之后,就可以把静态资源通过CDN加速。这样,静态资源的请求大部分通过就近部署的CDN服务器提供服务,用户的延迟也会有明显的提升。网站服务器专注于服务动态流量,带宽压力会小很多。       动静分离,部署时静态资源要给一个单独域名,这

2022-04-15 11:33:13 926

原创 Kerberos认证服务理解

  当系统中服务模块分开时,比如有邮件服务,文件服务。传统认证模式是用户传输用户名和密码到相应的服务中,服务认证通过后返回结果。这会产生一个问题,即用户的信息会在网络传输中被劫持、攻击。当然这里可以采用非对称加密来加密数据、签名来确认用户身份。  比如甲想给乙发一个安全的保密的数据,那么应该甲乙各自有一个私钥,甲先用乙的公钥加密这段数据,再用自己的私钥加密这段加密后的数据.最后再发给乙,这样确保了内容即不会被读取,也不会被篡改.因此理想情况下应该是客户端来进行验证。客户端像认证服务器发送自己的用户名,认

2022-04-13 16:32:35 436

原创 谷歌文件系统GFS理解

前言:GFS是由Google设计并实现的一个可扩展的分布式文件系统,它适用于大型分布式计算密集型应用程序。与一般分布式文件系统具有诸多相同点,如性能、可伸缩性、可靠性和可用性,它的设计由Google应用工作负载和技术环境驱动。提出了一些不同的设计观点:1.系统是由许多经常会故障的廉价商品组件组成,所以必须要经常对它进行监控,以及在例行基础上进行检测、容错,以及故障组件的恢复2.系统存储了一定量的大文件。我们预计有数百万个文件,每个一般在100MB或更大。数GB的文件是很常见的情况,应该被有效的管理。小

2022-03-22 16:52:44 6475

转载 零拷贝的理解

DMA技术:在没有 DMA 技术前,I/O 的过程是这样的:1.CPU 发出对应的指令给磁盘控制器,然后返回;2.磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,(「内核缓冲区」实际上是磁盘高速缓存(PageCache))然后产生一个中断;3.CPU 收到中断信号后,停下手头的工作,接着把磁盘控制器的缓冲区的数据一次一个字节地读进自己的寄存器,然后再把寄存器里的数据写入到内存,而在数据传输的期间 CPU 是无法执行其他任务的。可以看到,整个数据的传输过程,都要需

2022-03-16 21:22:29 162

原创 Redis集群理解

Redis集群即一般是多主多从的设置。他们之间传播握手信息通过Gossip协议传播Redis集群通过分片的方式来保存数据库中的键值对,集群的整个数据库被分为16384个槽(slot),数据库中每个键都属于这16384个槽中的一个,集群的每个节点可以处理0个或最多16384个槽。当数据库中的16384个槽都有节点在处理时,集群处于上线状态,相反,如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态。计算键属于哪个槽:def slot_number(key): return CRC16(key

2022-03-16 15:37:54 841

原创 Cookie Session Token的理解

1.HTTP无状态性HTTP是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的。2.Cookie+Session处理登入Cookie 是服务器端发送给客户端的一段特殊信息,这些信息以文本的方式存放在客户端,客户端每次向服务器端发送请求时都会带上这些特殊信息。当访问一个页面的时候,服务器在下行http报文中,命令浏览器存储一个字符串;浏览器再访问同一个域的时候,将把这个字符串携带到上行http请求中。第一次访问第一个服务器,不可能携带cookie。必须是服

2022-03-11 14:22:55 534

原创 Java 类加载过程

加载阶段:通过classloader从.class文件中加载该类的二进制流文件并在内存中生成该类的java.lang.class对象。连接阶段:验证:验证加载进来的类是否符合规范准备:为类变量(静态变量)分配内存,并且赋予默认值。解析:将常量池中方法的符号引用替换为为直接引用符号引用:即一个字符串,但是这个字符串给出了一些能够唯一性识别一个方法,一个变量,一个类的相关信息。直接引用:可以理解为一个内存地址,或者一个偏移量。比如类方法,类变量的直接引用是指向方法区的指针;而实例方法,实例变量的直.

2022-03-07 15:05:52 215

原创 Java泛型

泛型指的是参数化类型,比如常见的ArrayList,默认成员是Object,当先添加数字再添加字符串时,编译不会出现问题,但是当从数组中取值时,便会报错,是由于在第一次添加数据时,ArrayList的列表属性便会变为对应数据的属性,当取值时候便会报错。使用泛型,规定列表属性比如 List list = new ArrayList();便可以在添加时发现错误。泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。.

2022-03-06 14:23:24 71

原创 JAVA锁种类

宏观上:乐观锁、悲观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java中的乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。悲观锁是就是悲观思想,即认为写多,遇到并发写的可能性高,每次去拿数据

2022-03-02 16:53:49 2218

原创 缓存一致性

一般带有缓存的业务逻辑如下:读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。我们常见的三种缓存更新方案:先更新数据库,再更新缓存先更新缓存,再更新数据库先删除缓存,再更新数据库先更新数据库,再删除缓存不管是先写MySQL数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况。举一个例子:1.如果删除了缓存Redis,还没有来得及写库MySQL,另一个线程就来读取,发

2022-03-02 14:33:25 72

原创 双亲委派模型

双亲委派机制(1)如果一个类加载器接收到了类加载的请求,它自己不会先去加载,会把这个请求委托给父类加载器去执行。(2)如果父类还存在父类加载器,则继续向上委托,一直委托到启动类加载器:Bootstrap ClassLoader(3)如果父类加载器可以完成加载任务,就返回成功结果,如果父类加载失败,就由子类自己去尝试加载,如果子类加载失败就会抛出ClassNotFoundException异常,这就是双亲委派模式。好处:避免重复加载 + 避免核心类篡改当父亲已经加载了该类时,就没有必要子Clas

2022-03-02 14:12:55 313

原创 ConcurrentHashMap理解

当你通过get(k)获取对应的value时,如果获取到的是null时,你无法判断,它是put(k,v)的时候value为null,还是这个key从来没有做过映射。HashMap是非并发的,可以通过contains(key)来做这个判断。而支持并发的Map在调用m.contains(key)和m.get(key)的时候,m可能已经不同了。...

2022-03-01 19:49:48 329

原创 Java死锁

死锁条件:互斥:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。请求等待:当进程因请求资源而阻塞时,对已获得的资源保持不放。不可剥夺:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。循环等待:在发生死锁时,必然存在一个进程–资源的环形链。死锁预防:破坏互斥条件:加锁就是为了线程互斥,所以一般不会破坏这个条件。破坏请求等待:线程满足所有资源需求后再进行资源分配。破坏不可剥夺:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源。破坏循

2022-03-01 14:57:49 445

原创 JAVA 动态代理

JAVA动态代理有二种,一种是加强方法,在原执行方法之前和之后添加新的执行方法。这也是AOP的实现原理。下面演示的是加强方法另一种是重写方法。代理对象要实现InvocationHandler接口。声明时用newProxyInstance(代理对象的类加载器,代理接口,接口具体实现)。InvocationHandler里的invoke就是调用代理类方法时执行的内容,当代理多个对象时可以采用method.getName(){重写方法}来区分重写的代码块是哪个方法的具体实现。import java.lan

2022-02-28 21:07:45 207

原创 分布式事务 2PC、3PC、TCC

参考:https://blog.csdn.net/bjweimengshu/article/details/866980362PC到3PC 增加了CanCommit,协调者会先询问是否有足够的资源可以执行,如果可以则剩下的与2PC一致,这样做的好处是可以在不执行的情况下得知是否能执行成功,减小资源消耗。同时引入超时机制主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧

2022-02-24 19:31:43 217

原创 Java 虚拟机栈会出现两种错误: StackOverFlowError 和 OutOfMemoryError

StackOverFlowError:如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出 StackOverflowError 异常。一般是由于递归导致的无限嵌套调用递归方法。OutOfMemoryError:如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出 OutOfMemoryError 异常。...

2022-02-21 10:45:42 568

转载 JAVA线程池

任务提交给线程池之后的处理策略:         如果当前线程池中的线程数目小于corePoolSize,则每来一个任务,就会创建/分配一个线程去执行这个任务;(默认情况下,创建线程池之后,线程池中是没有线程的,需要提交任务之后才会创建线程。在实际中如果需要可以在线程池创建之后立即创建线程)         如果当前线程池中的

2022-02-20 18:31:03 103 1

原创 Java中final的理解

先上结论1.final 修饰字段基本类型:不可更改引⽤类型:不可指向新的引⽤,但是对象内的数值可能会改变2. final 修饰类:该类不可以被继承3. final 修饰⽅法:⼦类不能覆盖这个⽅法对于final修饰引用类型时,如StringBuilder 当StringBuilder 扩张时,引用位置不变引用值改变。但当将StringBuilder 换成String便不同,因为String本身位于方法区的常量池中,修改String等同于在常量池中新建一个变量,然后将对象指向新的变量。因此修改

2022-02-15 17:07:51 192

原创 对于LIMITE,Mysql优化器导致的有时候不走索引而是走全表查询

使用Mysql官方数据库sakila作示例首先查看actor表内索引有一个主键索引(聚簇索引)和一个last_name字段的二级索引         这里我是想走聚簇索引找出第一条id,当然这里是排好序的值肯定是最小值。但是实际搜索中发现查询了200行才查到,走的是二级索引。按理说走主键索引应该是一行就搜索到了。       &nbsp

2022-01-17 16:33:53 611

原创 Java Deque作为队列和栈的底层解析

Deque 说白了就是一个双端队列,可以从头部和尾部获取元素的值。在作为栈时,接口主要为push,pop作为队列时,接口主要为add,pollpush的底层是 addFirst()即将元素添加到队列的首部。add的底层是 addLast()即将元素添加到队列的末尾。pop的底层是 removeFirst()即移除并获得队列首部的值。poll的底层是 pollFirst()即移除并获得队列首部的值。所以,从理论上来说栈和队列的方法可以混着用,只是添加或者获取队列的位置不同,本质上来说都是对一个

2021-08-15 17:16:03 622 1

原创 JAVA String的用法

public char charAt(int index)charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。String与Char之间的相互转换(1)String类型转char[] 类型,使用String类型的toCharArray()方法;(2)char[] 类型转String类型,使用String.valueOf()方法 String str = "Hello World!"; char[] cs = str.toCharArray();c

2021-03-03 20:26:31 114 1

原创 Hadoop最新版安装以及踩坑

大致步骤同https://my.oschina.net/langwanghuangshifu/blog/2231251其中配置从机的slave文件变成了workers文件遇到的bug1.启动的时候主机无ResourceManager和NodeManager解决:直接下载activation-1.1.1.jar到lib目录下,或者本地上传到${HADOOP_HOME}/share/hadoop/yarn/lib目录下后重新启动start-yarn.sh即可cd ${HADOOP_HOME}/s

2021-01-19 16:35:18 202

原创 spark集群搭建一(免密登入)

参考https://www.cnblogs.com/purstar/p/6293605.html注意在这一步中,要在主机从机中都生成密钥。最后配置的通过,可以免密登入感想:学校网太封闭,只能内网和内网之间进行数据交换,更绝的是学校wifi和网线分配的是二个地址,他们之间也不能进行交换。傻掉...

2021-01-15 18:56:38 622

原创 成电作业3进程间传递数据(简化版读字母非单词)

作业要求代码思想首先通过一个生成目录和目录下面文件的代码生成要求的目录之后不同进程通过有名管道进行通信(使用的时候发现有名管道有问题,便用了文件系统做代替,管道实质上来说也就是FIFO的文件),对于判断数据使用共享内存来进行进程间的读取,对于锁,使用信号量,将信号量存于共享内存中,便可以使进程间可读。代码实现创建文件目录以及文件代码:#include<pthread.h>#include<stdio.h>#include<stdlib.h>#inclu

2020-11-19 15:03:21 72

原创 成电作业1在内存中构建一个10叉非完全树T10并读出来

实验要求创建树代码#include<stdio.h>#include<stdlib.h>#define TEN 10#define MAXLEVEL 7#define MaxSize 10000000typedef struct tree{ int data; int Level; struct tree *children[TEN]; }tree;//初始化队头和队尾指针开始时都为0typedef struct que

2020-11-19 13:57:51 79

原创 成电linux课程作业,多线程生产者消费者问题

问题描述问题描述如图:代码思想生产者消费者使用管道进行通信,每次读写1024*sizeof(int)大小的数据。int fd[10][2];//管道数组int fd_empty[10]={0};//消费者线程判断管道是否为空数组生产者要判断管道是否为空,消费者要判断管道内是否含有数据,因此追加声明一个fd_empty[]数组来让生产者消费者线程判断。由于只有一个生产者,所以生产的时候是顺序生产的,即文件中的数据块为1,2,3,4…。为了生产效率,生产时会遍历管道,寻找到为空的管道将数据填入其

2020-10-28 21:47:56 122

原创 Linux线程执行顺序

int pthread_create(pthread_t* pthread, const pthread_attr_t*, void* (*start_routine )(void*), void* arg ) 成功返回0,错误号表示失败pthread_t 类型变量的thread,线程的标识pthread_attr 线程属性设置,控制线程与程序其他部分交互方式,常设为NULL,默认线程属性start_routine 线程函数指针,是线程要执行的代码,参数为void(*)arg 传递给start_

2020-10-22 15:22:48 867

原创 Mac应用无法读取隐藏文件

在选取文件夹界面 Shift + Command + . 就可以选取了

2020-10-15 20:26:20 169

原创 阿里天池金融风控-贷款违约预测xgboost回归

第一次尝试(使用xgboost回归)这里难度不是很大,可以参考XGBRegressor使用。我这里将预测的数据保存到文件中,方便之后的操作,不用每次操作都训练一次。import pandas as pdfrom xgboost import XGBClassifier#做分类问题from xgboost import XGBRegressor#做回归问题df = pd.read_csv("/Users/apple/PycharmProjects/K-means/Datawhale/Result3.

2020-10-10 15:52:25 2612 3

原创 阿里天池零基础入门金融风控-贷款违约预测文本处理

阿里天池零基础入门金融风控-贷款违约预测文本处理文本处理日期处理等级处理就业年限处理删除含有空值的行数据归一化踩坑文本处理日期处理earliesCreditLine:可以看到earliesCreditLine使用的是英文月份-年来进行存储的。这里我们使用’-'的正则表达式分开月和年,再用判断语句将英文月份转化为数字月份最后将二者的存储格式统一。这里代码段使用的不是很好,最好是使用df.iloc['earliesCreditLine']获得earliesCreditLine列,因为后续处理

2020-10-07 15:44:08 958

原创 Pandas 排序后绘图问题

Pandas 排序后绘图因为下面展示一些 内联代码片。loanamnt_number.sort_values(ascending=False).head(10)对loanamnt_number进行排序后输出格式为列表非DataFrame类型,直接使用绘图会有问题,这个时候进行转换pd.DataFrame(loanamnt_number.sort_values(ascending=False).head(10)) 转换为DataFrame格式后loanamnt_number_dat

2020-09-24 19:25:48 567

原创 selenium爬取淘宝商品基础数据以及商品详情(茶叶数据)

爬取淘宝商品基础数据以及商品详情

2020-07-17 21:46:17 1816

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除