自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 Transformer学习速记

Transformertransformer是一个seq2seq模型(即输入一个序列,输出一个序列),最早被用于机器翻译,如下图:而transfomer模型的结构则主要由encoder和decoder构成,如下图:其中encoder与decoder的参数是独立训练的; 单个encoder和decoder内部的具体结构如下图:encoder单个encoder主要由3部分组成:输入层,注意力机制层,前馈神经网络层输入层该层做的事情:对输入的原始数据做embedding进行位置编码,t

2021-10-10 17:11:40 313

原创 RocketMQ学习

RocketMQ入门篇RocketMQ的架构组成NameServer: 主要是对Broker进行管理,主要包括对消息的路由的管理。Broker:主要负责对消息的存储,消息的转发ProducerConsumer:消息消费者,负责消费消息,一般是后台系统负责异步消费。Consumer也由用户部署,支持PUSH和PULL两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制。Pull:拉取型消费者(Pull Consumer)主动从消息服务器拉取信息,只要批量拉取到消息,用户应用就会启动消

2020-06-30 20:58:07 912

转载 Spring的事务隔离级别/事务传播行为

Spring的五种事务隔离级别默认:默认使用数据库的隔离级别读未提交读提交可重复读串行化Spring的七种事务传播行为1. propagation_required:表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。 否则会启动一个新的事务。2. propagation_supports:表示当前方法不需要上下文,如果事务存在当前事务的话,那么该方法会在这个事务中执行。也就是说:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。@Trans

2020-06-29 21:01:36 369

原创 操作系统常问面试题总结(持续更新)

Q1: 进程间的通信方式1. 匿名管道管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写int pipe(int fd[2]);存在形式:无名管道:只存在于内存中的文件使用限制:只支持半双工(单向交替传输)只能在父子进程或兄弟进程中使用2. 命名管道解决了匿名管道的只能在父子进程中使用的限制。存在形式:命名管道:存在于实际的磁盘介质或者文件系统#include <sys/stat.h>int mkfifo(const char *pa

2020-06-16 15:44:32 208

原创 由mysql的默认隔离级别引出的几个问题

讲讲mysql有几个隔离级别?mysql的默认隔离级别是哪个?你们项目中选了哪个隔离级别,为什么?这上面三个问题是面美团的时候被问到的。。前两个还好。。第三个让我有点摸不着头脑。。查了些资料之后就记录一下这个问题吧Q1: MySQL有几个隔离级别送分题… 读未提交,读提交,可重复读,串行化Q2: Mysql的默认隔离级别是哪个?送分题… mysql默认是可重复读,但oracle等其他的几个默认好像都是读提交…而mysql默认是可重复也是有历史原因的,mysql的主从一致性是会通过binl.

2020-06-15 21:42:23 288

原创 Redis对过期Key的删除策 / Redis事务

Redis对过期key的删除策略如果假设你设置了一批 key 只能存活 1 个小时,那么接下来 1 小时后,redis 是怎么对这批 key 进行删除的?定期删除 + 惰性删除定期删除:redis是默认每隔100ms就随机抽取一些设置了过期时间的key,检查是否过期,如果过期就删除。注意!这里是随机抽取, 这样即使在redis中存储了很多数据的情况下,依然能够保证性能.惰性删除:懒惰删除就如字面意思,每次在获取key的时候,会排查这个key是否过期,如果过期了就删除。Redis内存

2020-06-15 19:50:21 228

原创 Redis主从模式学习

单机Redis的瓶颈容量瓶颈( 单台Redis提供的容量有限 )QPS瓶颈( 单台Redis能提供的有限 )机械故障( 单台redis无法保证高可用 )主从复制的约定一个master可以有多个slave一个slave只能用一个master数据流向是单向的,master到slave (所以要求一般slave是read-only的,不然就无法保证主从一致性了)主从配置的两种方式slaveof命令(运行中执行)例如,机器A的ip为ipA, 机器B的ip为ipB,机器A上的redis作为

2020-06-15 17:07:55 793

原创 秒杀项目总结(附秒杀系统设计)

GitHub:链接地址UserController("/user")获取验证码("/getotp")随机生成10000~99999的数字将验证码同对应手机号关联,即使将 < 手机号, 验证码 > 这个KV对存到session中模拟短信发送(仅仅将其打印出来)返回通用对象注册("/register")根据手机号从session中获取验证码若验证成功,则调用userService的注册方法(注册过程是一个事务)注册内容主要就是合法性判断,数据库的更新等等(使用MD5对密码

2020-06-14 18:14:54 2693

原创 HTTP1.0/1.1的区别 & Get和Post的区别

HTTP1.0和HTTP1.1的主要区别区别一:短连接和长连接一、HTTP1.0使用短连接http1.0使用的是短连接,就是每进行一次http请求都要重新建立一次tcp连接。短连接影响性能的最主要的两个原因a. 每次都需要握手/挥手/慢启动tcp连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大b. tcp连接数过多而被阻塞一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个,因

2020-06-13 18:10:38 1400

原创 Java并发学习(二)

一、start和run的区别start方法是创建一个新的子线程并启动(调用run方法)run方法只是Thread的一个普通方法的调用二、线程的状态1. 新建(New): 创建后尚未启动的线程的状态2. 运行(Runnable):包含Running和Ready3. 无限期等待(Waiting): 不会被分配CPU执行时间,需要被唤醒没有设置Timeout参数的Object.wait()方法没有设置Timeout参数的Thread.join()方法LockSupport.part()

2020-06-13 11:25:13 137

原创 redis的数据结构以及使用场景分析

redis的数据结构以及使用场景分析1. stringa. 底层结构string的数据结构存储的是key-value类型, value不仅可以是string,也可以是数字。redis中的String是可以修改的,称为动态字符串(SDS),其实就是维护了一个预分配的字节数组,如下struct SDS{ T capacity; //数组容量 T len; //实际长度 byte flages; //标志位,低三位表示类型 byte[] conte

2020-06-12 11:31:23 190

原创 错排问题(装错信封问题)

问题:某人给五个朋友写信,邀请他们来家中聚会。请柬和信封交由助手去处理。粗心的助手却把请柬全装错了信封。请问:助手会有多少种装错的可能呢?换句话说:对[0,n)进行全排列,对于每一个排列A,对于任意i∈[0,n) , 都满足 A[i]!=i , 求这种排列的个数.解法面试遇到这种题,n应该不会太大,用下面这个思路和递推就能搞定如果是笔试的话…就直接上dp来做…最后象征性的放个公式...

2020-06-05 17:49:25 1224 1

原创 select/poll/epoll学习

selectint main(){ char buffer[MAXBUF]; int fds[5]; struct sockaddr_in addr; struct sockaddr_in client; int addrlen, n,i,max=0;; int sockfd, commfd; fd_set rset; for(i=0;i<5;i++) { if(fork() == 0) { child_process(); exit

2020-06-05 15:39:15 167 1

原创 一个url请求的流程

主要流程1. 域名解析域名解析就是根据url来获取对应的ip的过程。浏览器 会首先会去搜索浏览器自身的DNS缓存 , 如果找到了url对应的ip就直接返回如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束.如果在OS的DNS缓存里也没找到,那么尝试读取hosts文件(在linux和mac下,hosts在/etc/hosts里)如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置

2020-06-04 23:59:36 1251

原创 HTTPS学习

HTTP和HTTPS的区别HTTP监听80端口,HTTPS监听443端口HTTP的报文没有进行加密,而HTTPS使用了SSL或TSL进行了加密,其实质是通过非对称加密+CA认证来得到对称加密的密钥,然后开始使用对称加密进行传输,下面是HTTPS的一个主要流程。流程1. 根据非对称加密 + CA 确定对称加密的密钥K客户端 => 服务端:在请求报文中携带的信息主要有:支持的SSL版本支持的非对称加密算法随机数1服务端向CA请求证书:(这一步需要付费)服务端向

2020-06-04 21:42:33 142

原创 Linux指令学习/JVM指令

1. 测试端口是否能连通telnet ip portssh -v -p port username@ip(-v表示是debug模式)curl ip:port2. sshSSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。远程登陆ssh username@ip3. netstat检测本机的端口连接情况,可以使用netstatnetstat -ano | grep port4. ps查看某个进程的情况ps -ef | grep pid5. grepgre

2020-06-02 18:55:41 198

原创 线程池学习总结

一、为什么使用线程池1. 能够减少线程切换带来的开销如果有大量执行时间很短的任务,那么上下文切换带来的时间开销甚至会超过任务执行的时间,这显然是不合理的。而使用线程池就能降低线程创建和销毁造成的损耗。2. 能够提高响应速度任务到达时,无需等待线程创建即可立即执行。3. 提高线程的可管理性线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。二、线程池的生命周期线程池有5种状态:其生命周期转

2020-06-01 18:04:59 217

原创 Redis缓存雪崩/穿透/击穿

1. 缓存的收益与成本1. 收益:加速读写读缓存中的数据要比读数据存储位置的速度要快。(例如:寄存器-内存,内存-磁盘)降低后端负载如果不加缓存的话,并发的压力会直接加到后端数据库上,并发较大的时候,数据库可能会hold不住,而这里可以通过增加一层缓存,通过直接访问缓存不仅访问速度更快,而且减少了io次数,减少了数据库的压力。2. 成本:数据不一致:缓存层是数据层的时间窗口不一致,和更新策略有关。代码维护成本:多了一层缓存逻辑运维成本:例如R

2020-05-29 20:24:27 358

原创 TCP滑动窗口/拥塞控制/流量控制

TCP和UDP的区别滑动窗口拥塞控制在理想情况下,随着请求数的增长,网络的吞吐量也会增长,当用户的请求出超出了网络所能承载的负荷时,吞吐量将保持不变。。而实际情况是,当用户对网络资源的请求数量超过了网路所能抗住的负荷时,吞吐量会随着请求的增多而减少,直到变为0。而拥塞控制就是为了防止这一情况的产生,其实现的方式就是,通过调整发送窗口的大小,来控制发送速率,从而起到减少网络流量的作用。 拥塞控制包括了4个算法策略分别是:慢开始,拥塞避免,快重传,快恢复。流量控制...

2020-05-28 22:16:12 440

原创 设计模式——动态代理及实现

在啃Spring的AOP之前,在复习以下动态代理及其实现方式代理模式在不使用代理模式的场景下,对象A想使用对象B的功能,一个方法是通过持有对对象B的引用,然后直接使用对象B提供的服务了。而使用了代理模式,则引入一个第三方的代理对象,这个代理对象持有着对对象B的引用,可以调用对象B的服务与资源,而如果有对象希望使用对象B提供的服务的话,则不再去找对象B,而是去找这个代理对象。 如下图所示。...

2020-05-07 21:55:25 133

原创 一个Bean对象的创建流程 & IOC容器创建流程

流程图一、生成并注册BeanDefinition具体过程看这里二、根据BeanDefinition创建Bean*如果是在容器初始化阶段,那么只会实例化 非延迟加载的、单例对象(通过遍历已注册的BeanDefinition)beanName再获取(transformedBeanName)如果beanName是加了&前缀的,说明是希望获取factorybean的,但是实...

2020-05-02 21:40:33 627

原创 Spring监听机制

观察者模式是一个常用的设计模式,Spring源码中在很多地方也用到了这一机制,为了能更好的理解源码,先来学习一下Spring的监听机制.事件监听器模式监听器监听感兴趣的事件,一旦事件发生,便作出响应事件源(Event Source)事件源就是产生事件的源头,例如:一个User对象产生了一个Click事件,那么User对象就是事件源; 一个User对象触发了一个下单操作事件,那么User...

2020-04-30 20:08:17 355

原创 Spring源码阅读——PostProcessor(一)

PostProcessor系列接口一共有3种PostProcessor接口,分别是:BeanDefinitionRegistryPostProcessorBeanFactoryPostProcessorBeanPostProcessor它们都是在容器进行refrush的时候,在不同阶段进行调用,其相对的调用顺序是: 1->2->3提供的这三种PostProcessor...

2020-04-30 15:02:30 201

原创 JVM垃圾收集总结

一、预备知识1. 如何判断一个对象是不是垃圾1.1 可达性分析以GC ROOT为起点进行扫描,能够被扫描到的对象,都是存活的对象,而无法被扫描到的对象,就是“垃圾”,需要被回收。GC ROOT一般包括但不限于:虚拟机栈中局部变量表中引用的对象本地方法栈中 JNI 中引用的对象方法区中类静态属性引用的对象方法区中的常量引用的对象被同步锁持有的对象1.2 对象引用可达性分析是...

2020-04-30 10:19:31 190

原创 Spring源码阅读——预备知识(草稿)

本文是个草稿,完全用于个人复习(BeanDefinition —— Bean的定义根据配置,生成用来描述Bean的BeanDefinition,例如常用属性:作用范围scope(@Scope)懒加载lazy-init(@Lazy): 决定Bean实例是否延迟加载首选primary(@Primary): 设置true的bean会是优先的实现类factory-bea...

2020-04-29 23:59:20 125

原创 Spring源码阅读——BeanDefinition注册的过程

本篇文记录一下从location路径 -> BeanDefinition注册的过程. 以XML方式为例子.看本文前需要读者已经明白如下知识:BeanDefinition接口,Resource接口,ResourceLoader接口,BeanFactory接口,ApplicationContext接口,我会在另一文中简单介绍一下这些.一、什么是BeanDefinition的注册Bea...

2020-04-29 23:24:12 518

原创 Spring IOC与AOP的使用小结

一、bean的几种创建方式(IOC)1. 使用构造函数创建bean1.1 使用默认构造函数创建bean即<bean id=.. class=.. />, 则默认调用无参构造函数来创建bean,并装入容器中. 此时如果类中没有默认构造函数,那么对象将无法被创建1.2 使用有参构造函数创建bean <bean id=".." class=".."> ...

2020-04-28 00:31:28 210

原创 Spring源码阅读——Aware接口

一、Aware接口用来做什么在使用Spring时,如果我们想在Bean中使用Spring底层的资源,例如:ApplicationContext, StringValueResolver等时,该如何得到呢? Aware接口就提供给了我们这个功能.package org.springframework.beans.factory;/** * A marker superinterface ...

2020-04-27 22:56:20 132

原创 new一个对象的过程

一、预备知识1. JVM运行时数据区域1.1 方法区方法区存放了什么?方法区主要存放的内容有:常量池被虚拟机加载的类的信息,比如方法名字,类的名字,父类、接口以及一些静态变量,静态方法等。一些即时编译器编译的代码数据、常量。方法区的实现jdk1.6及之前,方法区是完全由永久代实现的;在jdk1.7时,将方法区的常量池放到了堆中进行实现;在jdk1.8时,引...

2020-04-21 00:20:57 1063

原创 Java并发编程学习笔记

第二章 Java并发机制的底层实现原理一、Volatile关键字作用:保证了“共享变量”在多线程环境下的“可见性”.底层实现原则:对被volatile修饰的变量进行写操作的时候,JVM会向处理器发送一条#Lock前缀指令,这个指令的作用就是将对应缓存行的数据写回到被缓存的内存。一个处理器将缓存回写到内存<addr>中,那么其他处理器中对<addr>...

2020-04-18 20:37:59 143

原创 面试突击——数据库篇

一、索引1. 为什么使用索引提高查询效率,避免全表扫描;2. 如何定位并优化慢sql先说步骤:第一步:根据慢日志定位慢查询sql根据慢查询日志确定慢sql:使用show variables like '%quer%';可以看到一些变量(可以使用set global xx=..;, 也可以在my.cnf配置文件里修改,是mysql server的启动配置),其中:slow...

2020-04-17 15:45:05 415

原创 面试突击——Redis

一. memcache和Redis的区别Memcache:代码层次类似Hash支持简单数据类型不支持数据持久化存储不支持主从不支持分片Redis:数据类型丰富支持数据磁盘持久化存储支持主从支持分片二. 为什么Redis那么快?完全基于内存,绝对部分请求是纯粹的内存操作。数据结构结构简单,对数据操作也简单。不使用表,不需要对多个表进行关联,存储结构是键...

2020-04-12 20:22:27 179

原创 计算机网络复习

感觉要来不及了。。这里就按照常考知识点进行突击。。死马当活马医了。。问题一:http和https的区别是什么?http协议是不安全的,其消息包是以明文的形式暴露在外面的;而https是安全的,其实是ssl协议+http协议,会对传输的消息报进行加密;http协议的监听端口是80,而https是443问题二:什么是Http协议无状态协议?怎么解决Http协议无状态协议?无状态协议对于...

2020-04-12 00:13:50 176

原创 详解AQS

一、什么是AQS我们常用的j.u.c包里,提供了许多强大的同步工具,例如ReentrantLock,Semphore,ReentrantReadWriteLock等,但当这些工具难以满足某个场景的需求时,我们就需要定制化我们自己的同步器,这时,我们可能会想,如果能有一个像Servlet这种只要重写某几个方法就能完成一把定制锁的实现的就好了!! 没错,AQS就是提供了这样一种功能,它如果要实现一个...

2020-04-07 22:20:00 720

原创 ThreadLocal学习

一、ThreadLocal解决了什么问题在一些情况下,我们希望对于某一个共享变量,对于不同线程来说都是独一无二的,例如:有一个共享变量x,线程A去对其进行写操作,读操作,线程B也对其进行写操作读操作,而线程A和线程B在去读写x时的感觉,就像是读写一个本地变量一样,完全与外界封闭, 这就是线程封闭的想法。下面有三种线程封闭的实践:Ad-hoc 线程封闭:即维护线程封闭性职责交给程序实现,...

2020-04-03 12:49:55 95

原创 Git学习

本文只介绍git的指令,用于温习。 如果忘的很干净很干净,建议重新看廖雪峰的git教学。Git常用指令git init初始化当前文件夹成一个仓库。git add readme.txt把当前的readme.txt这个文件加入到仓库的暂存区中git commit -m “说明”把暂存区中的文件提交到工作区中git status让我们时刻掌握仓库当前的状态,例如哪些文...

2019-04-19 10:45:52 110

原创 使用SWIG来扩展Python

一、在Windows上安装SWIG: 1.下载swigwin :http://www.swig.org/download.html (是swigwin不是swig,不然要自己手动搞swig.exe) 2.解压缩包swigwin-3.0.12.zip 至指定目录 (这里假设是D:\swig) 3.配置环境变量(假设python的安装目录为E:\python): 新建PYTHON_INC

2017-06-25 12:00:20 6784

中科大软件学院复试面试指南

中科大软件学院复试面试指南

2019-03-07

Python参考手册第4版 高清pdf

Python参考手册第4版 高清pdf

2017-05-16

空空如也

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

TA关注的人

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