LSM树
LSM树 - Log Structured Merge Tree,LSM树并不是一个严格意义上的树状数据结构。目前HBase、LevelDB、RocksDB等 NoSql存储都基于LSM树做的。
ES倒排索引
ES的倒排索引结构:Mysql是B+树,那么倒排索引是如何组织的?
mysql 间隙锁的死锁
RR隔离级别下,间隙锁会触发死锁,比如
redis集群方案
单机版redis容量有限,且能支持的qps也有限。为了应对大量数据,需要提供集群版的redis方案
ES倒排索引
ES的倒排索引结构:Mysql是B+树,那么倒排索引是如何组织的?
B站面经
一面: 自我介绍,自我介绍后简单问了下项目。 a. 用过哪些组件,我回答mysql redis kafka这些。然后问了一下redis的使用场景。
Kafka学习-producer
- client会把消息封装成ProducerRecord 成员变量是 private final String topic; private final Integer partition; private final Headers headers; private final K key; private final V value; private final Long timestamp;
mysql的意向锁
innodb支持多粒度锁,允许行级锁和表级锁共存,意向锁是一种表锁,并且不与行级锁冲突。
rpc泛化调用
泛化调用指调用方在没有服务方提供的api(sdk)的情况下,对服务方进行调用。
graphQL
GraphQL是一种描述请求数据方法的语法,通常用于客户端从服务端加载数据,graphQL有三个主要特征
select poll epoll
select poll epoll都属于IO多路复用,其优势就是单个process可以同时处理多个网络连接的IO,其基本原理原理是process会不断地轮询其负责的所有socket,当某个socket有数据到达时,就通知用户进程。select/epoll/poll的优势是能处理更多的连接。
RocketMq
RocketMq分为四个组件: NameServer \ Broker \ Producer \ Consumer
guava了解
guava是Google退出的一个工具类依赖,提供了很多增强的功能
图数据库
很多数据都是图状的数据,比如用户信息、用户关系,内容(视频、文章等),用户和内容之间的联系等等,这些数据以及之间的关系关联在一起,就是图状数据。
didi
first:
didi
first:
ZGC垃圾回收
ZGC是JDK 11引入的新的垃圾回收机制,宣称能hold住TB级别的heap,暂停时间在10ms下,并且吞吐量最多下降15%。
Netty小记
Netty是由JBOSS提供的一个java网络框架,是对jdk nio的封装。有时候需要自定义协议,netty就必不可少了,可以用netty对协议进行高度的定制化.
Service Mesh
现有的微服务架构存在着很多不足 Service Mesh可以被称为微服务领域的TCP协议, 使用代理模式,将分布式服务的通信抽象成单独一层, 在这层中实现了负载均衡、服务发现、流量控制、trace等功能,作为一个和服务对等的agnet服务,和服务部署在一起,通过agent之间的通信 完成服务之间的通信需求。
Service Mesh
现有的微服务架构存在着很多不足 Service Mesh可以被称为微服务领域的TCP协议, 使用代理模式,将分布式服务的通信抽象成单独一层, 在这层中实现了负载均衡、服务发现、流量控制、trace等功能,作为一个和服务对等的agnet服务,和服务部署在一起,通过agent之间的通信 完成服务之间的通信需求。
jvm堆外内存
堆外内存又被称为直接内存,不归属于jvm管理,操作系统直接管理。堆外内存相对于堆内内存来说,优点是 减少了垃圾回收的工作,加快了复制的速度。 但是堆外内存难以控制,可能发生内存泄露。堆外内存只有等full gc才能回收
Resilience4j
hystrix已经停止维护了,resilien4j是比较新的熔断解决方案
sed 使用
sed 是一种在线编辑器 主要用来编辑一个或者多个文件,简化对文件的反复操作
分布式事务小记
- CAP理论
mybatis源码小记
- SqlSessionFactory sqlSession工厂类,与mybatis直接交互都是通过sqlSession
jdk cglib 动态代理
java的动态代理模式有两种实现 jdk和cglib的
Rocksdb小记
Git Flow
Git-Flow是 git的扩展,有效地把标准的git命令组合在一起,规范化git的使用
ElasticSearch 小记
目前线上和测试环境使用的是 6.3.1 版本, 最新版是7+, 明显的改动应该是版本7去掉了type的概念, 版本6里一个index只能有一个type。
HBase 入门
HBase是 高可靠、高性能、面向列、可伸缩的分布式数据库,属于BigTable的开源实现,主要用来存储非结果化和半结构化的松散数据。 HBase是Key-Value型
QUIC 协议
QUIC协议基于UDP实现,可以视作基于UDP实现的TCP。全称是 Quick UDP Internet Connections
CDN
用户访问未使用CDN缓存网站的过程是
TiDB初学
TiDB是PingCAP公司设计的开源的分布式数据库,兼容MySQL协议,支持水平扩展、具备强一致性和高可用性。
Docker 网络模式
- bridge模式 docker默认的模式,这种模式下,docker容器默认使用安装docker时创建的网卡docker0,和宿主机不在同一网段,不能和宿主机的网段通信。每一个容器都有 Network Namespace,都有自己的IP。 一个宿主机上所有的容器都通过docker0这个网卡连在一个二层网络里。
BM算法
BM算法和KMP算法同样都是一种字符串匹配算法,全称是 Boyer-Moore算法, 由Robert S.Boyer和 J Strother Moore提出, 比KMP算法效率高因此更常用,貌似很多文本编辑器的查找功能都是基于BM算法做的。其时间复杂度最坏是O(m*n) 最好是O(n/m)
KMP 算法
KMP算法 经常忘记它的内涵,在这里记录一下 希望能记住
git commit 规范
AngularJS的提交规范,格式:
git的cherry-pick
git的cherry-pick命令,可以理解为挑选提交的意思, 可以获取一个分支的单此提交,作为一个新的提交合并到当前分支上。
Jaeger
Jaeger是Uber推出的一款链路追踪系统,基于Opentracing,类似于Zipkin。
Redis Cluster 小记
Redis Cluster 中,每个节点都是有若干slave的,每个节点之间都是两两通信的,所以每个节点需要两个TCP端口,一个用于相应client端的交互, 另一个用户节点之间通信,两个端口的差值默认为10000。节点之间的连接用于宕机检测等。
Java 函数式接口一些概念
JDK8中引入了一个新的包 java.util.function。对接口大致分成了四类
SpringBoot 读取配置文件
Spring把 key-value键值对封装成为PropertySource。PropertySource有许多实现类,如MapPropertySource和PropertiesPropertySource。
Mysql InnoDB事务隔离级别
事务隔离级别有四种:
arthas入门
Arthas是阿里的一款开源的JVM的监控分析工具。可以通过jar包或者直接脚本运行。读音类似阿尔萨斯?
BTrace
BTrace可以通过编写脚本的方式,在不用重启JVM的情况下,获取程序执行中的信息。可以有效帮助线上排查问题。
HTTP2 协议
目前HTTP协议大部分是1.1版本,2版本在逐渐推广。HTTP2 引入了一个二进制分帧层,所以无法与http 1.1的server/client兼容,所以升到了版本2.
一次服务假死
服务假死 通过ip+port无法访问。通过 jmap -heap pid 和 jstat -gcutil pid 发现内存占用率并不高 gc次数也比较正常。 通过在网上搜索, 用 lsof命令发现该端口有大量CLOSE_WAIT状态的连接。用 jstack -l pid 打印出线程的堆栈信息。直接打印出的 信息比较难以分析。暂时找到 https://gceasy.io/same-state-threads.jsp 这个网站,分析发现线程数很多达到了800+,大部分的 线程都在 WAITING,很多都是卡在 HealthIndicatorBeansComposite$ReactiveHealthIndicators 这里。reactive模式的代码真是 太难看懂了,只能先猜测是 RedisHealthIndicator卡住了,访问 /actuator/health确实卡死。猜测是 Actuator的健康检查出错。 然后屏蔽调 RedisHealthIndicator的逻辑,/actuator/health正常返回。 总结一下就是 服务卡死先看 内存和GC的情况,jmap -heap 查看是否属于内存泄露的问题。还需要检查服务端口的连接是否正常,会不会有大量的 CLOSE_WAIT和TIME_WAIT状态的连接,CLOSE_WAIT是被动关闭方的状态,TIME_WAIT是主动关闭方的状态。这种状态比较多一般是 大部分线程卡死了, jstack -l 看一下,很有可能是线程都 wait了。
Spring 事务
在一个类或者方法上使用@Transactional注解,开启@EnableTransactionManagement注解即可启动事务。 默认情况下如果发生了unchecked异常,将会触发rollback;如果发生的是checked异常,被try catch包住将不会触发rollback。 @Transaction只能配置到 public级别的方法上 如果配置到其他可见度上将不会生效。
mysql并行复制
mysql的主从同步是 从库一个IO线程一个sql线程,IO线程从主库的binlog读信息,sql线程执行。 主和从之间是可能存在着复制延迟的,这样主和从的数据就是不一致的。
elk小记
ELK是 Elasticsearch Logstash Kibana的简称 ELK可以结合成大规模的分布式日志系统。 Elasticsearch是搜索引擎,Logstash是日志的收集过滤转发中间件,Kibana是可视化工具。 ELK查日志比直接查日志有一定的优势, 一个是多实例的日志查起来很不方便,一个是ES有搜索的优势。
vim小记
vim是一个很强大的工具, 不过我对它的了解还是太少了….
awk小记
awk是Linux下的一个比较有用的工具,但是也比较难学。对于处理日志等每行格式相同的文本文件,非常方便和强大。
git rebase命令
rebase命令平常用的比较少,通常都用merge了,记录一下这个命令
zipkin
zipkin是Twitter推出的一种分布式链路追踪工具,是对Dapper的一种实现,单个请求被称为span,整个链路被称为trace。
TOS简单研究
OSS (Object Storage Service) 对象存储,可以提供图片、文档、音视频等二进制的海量存储功能。TOS就是一个例子。
Service Mesh
中文名是服务网格,作用于TCP/IP层之上,微服务之下,在微服务之间,负责服务之间的网络调用、限流、熔断和监控的基础设施层。 Service Mesh通常是一系列轻量的proxy组成,对业务透明。
lsof命令
在Linux系统中,任何事物都是文件,网络连接和硬件也被当做硬件。lsof命令是一个系统级的监控、诊断工具。 lsof文件可以查看
Spring Cloud Gatewway 路由转发
对于Spring Cloud Gateway的路由转发机制一直比较迷,简单研究一下。
ETCD
ETCD是一个分布式的Key-Value存储,用来可靠而快速保存关键数据并提供访问。ETCD集群是为了高可用、持久化数据存储和检索,ETCD常用来做 分布式的配置中心。
JVM的metaspace
JDK8以后,JVM不再有PermGen(永久代),取而代之的是Metaspace。
Redis Cluster
Redis-Cluster架构中,总共有16384个slot,每个master都分得一部分slot,算法为 clot = crc16(key) % 16384,这样找到对应的slot。 cluster至少要3主3从。正常情况下每个哈希槽只由一个主节点处理,每个主节点都有1-n个slave,当主节点down调,slave可以选举成新的主节点
Mysql分页查询优化
其实就是Mysql中常见的 select … from … where … order by … limit ..,.. InnoDb中的原理是先查出 offset + limit条数据,再抛弃offset条数据,如果offset过大,sql的效率会很低。
thrift笔记
thrfit是Fackbook于2007年提出的一种RPC框架,可以跨语言,提供了多语言的编译功能和多服务器工作模式, 通过IDL(接口定义语言)来描述接口函数和数据类型,然后通过Thrift的编译环境生成各语言的接口文件。
Dapper笔记
Dapper是Google提出的生产环境下的分布式链路追踪系统,对一个分布式链路追踪系统有以下的需求:
唯一ID
很多情况下需要生成UUID,通常情况下一个UUID是128位, Java就有官方的util UUID。通过UUID.randomUUID()可以获得一个随机的UUID。
nc命令传输文件
除了scp命令外,nc命令也可以远程传输文件,用法如下:
Raft协议学习
上周分享Eureka的时候,对集群的理解很少,集群之间如何保持一致性等等其实都不怎么理解,肖大佬给了一个网站 http://thesecretlivesofdata.com/raft/ 让我 看一下Raft协议,对分布式协调的协议有一定了解吧,,,
unable to create new native thread
Java应用有时会突然报错:
Exception in thread “main” java.lang.OutOfMemoryError: unable to create new native thread
nginx location截断的问题
nginx配置文件中,proxy_pass里如果尾部带/,则会截断匹配的url, 如果尾部不带/,则不会截断匹配的url。
Redis big key
大key问题是key对应的value很大,大key会造成的问题如下:
TimSort算法
TimSort使用了”run“的概念,一个run是数组中单调上升或者严格单调下降的连续子数组。
Hystrix简述
Hystrix的步骤:
SimpleDateFormat线程不安全问题
Date转String时经常使用SimpleDateFormat这个类,但是这个类并不是线程安全的,在该类的format方法中, 会对一个calendar成员变量setTime,然后再根据这个calendar拼字符串,这一过程不是线程安全的,多线程环境下 可能造成错误的输出。
Redis分布式锁
redis是一种常用的实现分布式锁的方式,最简单的方式是setnx的方式,成功就加锁。 但是这种方式也有不少问题,比如没有不是可重入的,或者解锁的时候解错锁等等问题,或者redis一主一从, 主从同步时主挂掉,但是lock的key还没有迁移,这时锁就丢了。因此对于锁要求程度比较高的时候不能简单用这种方式
文件找重复记录命令
直接 sort filename | uniq -d 即可输出文件的重复行 |
并查集
并查集就是有“合并集合”与“查找集合”两种操作的一种数据结构。比如求解“朋友圈”问题:两个人如果是朋友或者间接朋友, 则认为这两个人属于一个朋友圈,现在求有多少朋友圈。
Consul小记
Consul有如下几个主要作用:
Logback小bug解决
发现logback的配置文件失效了,生成不了日志文件。google一番发现是因为项目引入的jar包里有logback.xml,其优先级高于 logback-spring.xml,导致项目的logback配置失效。然后在pom.xml里exclude即可。 先是把logback-spring.xml改名成logback.xml,发现配置重新生效,但是好像logback-spring.xml是鼓励的命名,于是还是继续确定问题, 用maven的命令:mvn dependency:tree 查项目的依赖,再搜logback,发现一个依赖引入了com.bytedance.logback…的jar包。 在idea的extrenal libraries里找到了这个依赖,发现里面确实存在logback.xml。于是在pom里excluede,发现配置重新生效,问题解决。
Redis开发与运维 读书小记
- Redis数据结构对应的底层数据结构
CountDownLatch使用
CountDownLatch是一种常用的同步工具类,属于java.util.concurrent包下,作用是使一个线程等待其他线程完成工作后再往下执行, 例如主线程使用了线程池处理N个任务,等待这N个任务执行完再往下执行就可以用CountDownLatch。
Spring定时任务
Spring自带的Scheduled Task是一个轻量级的定时任务调度器。
Cookie
一个Cookie有很多属性。
Java的variable hiding
Java的多态在变量上是不体现的,引用变量时,只根据声明的类型绑定变量而不是根据实例。 当子类和父类有同名变量时,子类的变量将会 hide 父类的变量。
aqs小记
AbstractQueuedSynchronizer是Java中许多同步类的底层实现原理。ReentranLocl、CyclicBarrier、Semaphore、CountdownLatch等都是基于aqs实现的。 这个是一种模板模式的实现。使用的时候一般是先声明一个内部类继承aqs,然后实现tryRelease()和tryRequire()方法(独占锁方式), 或者tryReleaShared()和tryAcquireShared()(共享方式)内部通过getState和setState对aqs的state进行操作,实现同步控制。
Kafka启动命令
首先要启动zookeeper,然后启动kafka: cd到bin文件夹下,./kafka-server-start.sh ../config/server.properties
Redis踩坑记
今天突然发现Redis外网连不上了,整了好久才弄好,原因是6379端口没有被iptables开放,,有点坑。 用iptables命令开放6379端口即可。
9月22日头条面经
拖了好久终于鼓足勇气参加宇宙条的面试了。。。
贝壳找房面经
9月1号贝壳找房面试。
阿里文学一面
9月12号下午电话一面。
快手面经
9月6号快手面试。
Subset
给定一个集合,求出这个集合的所有子集,该子集不包含重复元素
猿题库面经
8月30日面的猿题库。
美团酒旅面经
8月29日下午面的美团酒旅,一共三面。
拼多多面经
面拼多多的时候是2轮技术+1轮hr,我第一面居然是先面hr了,而且这一面的时间最长,,,感觉可能说的不是很好。。 二面是时候比较尴尬,面试官手上有当时在线笔试的资料,我有一道题是显示3分钟就做出来了,他估计知道不可能,就一直问我细节,我很仓促地应对,最后他说, 你不可能3分钟就做出来啊,我只能说互相帮助了。然后估计当时就应该凉了。 问了我Java里泛型的原理,没研究过。。。然后wait和notify的用法,这个回答了,说必须用synchronized(obj)。又问synchronized的原理,简单说了说。 然后是一道简单的算法,层次遍历二叉树。然后是B+树什么的。
搜狐面经
这次总算没有一面就挂了。。 一面的面试官感觉比我要小,然后问的也都比较基础,问了一些计网的东西,比如NAT、ARP,TCP和UDP区别。然后解释Restful,写线程安全的单例模式,等等。
JVM监控命令
- jstat 命令 – jstat [options] VMID [interval] [count] options有class、gc、gcutil gc可以看到young区和old区的内存占用情况,以及gc次数。
360一面挂经
8月23号面的360,通知是一天走完所有面试流程,结果一面就挂。。。 第一批面试的,面试官只问项目,先问实验室的,又问实习的项目。
- Spring中AOP和IOC解释,以及涉及哪些设计模式。
- MyBatis有什么优点,就是为什么用MyBatis,以及系统中MyBatis一般会有哪些参数设置(IP,端口这些),感觉这块答得不好,好久没有用过MyBatis了。后来我的理解是MyBatis把数据库交互和 业务代码分开了,降低了耦合。并且有动态sql。
- MySql有什么优点,项目里为什么用MySql而不用其他数据库,我说MySql适合项目的场景啊,他说我不这么认为,es和mongo更适合。现在想当时应该说项目已有的框架就是MySql,就直接复用了。
- JVM解释,面试官的意思是必须实际项目里调过优,用过jstat和jmap这些命令。还有如果发现一个java进程的CPU占用和内存占用很高,怎么排查问题。
- 因为我说过有道的爬虫解析用了MapReduce,面试官就问我Hadoop了解哪些,只能说不了解。。。
腾讯一面挂经
校招还没有投腾讯呢,但是因为之前实习的时候投过腾讯,不知道怎么搞的把我捞起来了。 一面是视频面,面试官先让写了一个算法题,求二叉树中两个节点的最近祖先节点。这个是比较经典的题目, 当时想了一会没想出来,还是偷偷用手机查的。。。写出来之后面试官让解释思路,我就磕磕巴巴地说了一通。 然后让我解释TCP三次握手和四次挥手,以及TIME_WAIT的状态出现在什么阶段,TIME_WAIT这个状态有什么作用,答错了,我说成是服务器等到最后一个ack时的状态, 其实应该是客户端发送完最后一个ack后进入的状态。就是是主动断开连接的一方进入TIME_WAIT状态,等待两个MSL时间,进入CLOSED状态。 TIME_WAIT状态存在的意义有两点:
- 如果直接进入CLOSED状态,那么如果server没有收到ACK,就无法重传了,协议就不可靠了。
- 如果直接CLOSED,然后client又向server发起一个新连接,可靠老数据会和新数据混淆。
HTTPS学习
面试的时候经常会被问到HTTPS,然后我只能答出https是加密的,就是在http和tcp之间加了层SSL/TSL。 但是面试官一般会再问原理,还有了解哪些加密的算法,只能说不会了。现在只好赶紧临时抱佛脚了。
Nginx负载均衡
Nginx内置的负载均衡策略有三种:轮询、加权轮询和ipHash。
Java 动态代理
Spring中的AOP的基础就是动态代理,动态代理也是代理模式的一种实现。 Java中动态代理的实现分为两种:JDK的动态代理和cglib的动态代理。
2018-08-02 B树 B+树
B树是一种多路平衡查找树,一个m阶的B树的性质如下:
- 每一个节点至多有m个孩子
- 根节点的孩子数量最小为2,其余节点的孩子数量最小为 m/2 (向上取整)
- 节点中关键字的数量为 m/2 - 1 至 m - 1
- 所有叶子节点都在同一层
2018-07-27 MySql锁
从锁的粒度MySql分为行锁、表锁和页锁。 表锁的开销小,但是粒度大,并发冲突的概率大。行锁则相反 MyISAM引擎只支持表锁,InnoDB则可以支持行锁和页锁。 MyISAM引擎是表级锁,在执行select语句时,会自动给涉及的表加上读锁;在执行update/delete/insert语句时,会自>动给涉及的表加上写锁。 而InnoDB在做行锁的时候,锁住的是索引中的索引项,因此不走索引的话InnoDB执行的是表锁,这一点很重要。 并且如果两条记录对应同一个索引项,是会冲突的。
2018-05-19 面试完美世界
一面问的比较多,先让讲了讲SpringMVC和Spring的上下文的关系。然后问线程池,让写Worker类的大致逻辑。 还有InnoDB和MyISAM的区别
2018-04-22 面试网易乐得/有道
4月20日面的乐得,22日面的有道。
2018-04-12 经常考的数据结构
1.跳表
2018-04-10 字符串最大回文子序列问题
最大回文子序列问题: 使用动态规划做, 初始化为: dp[i][i] = 1 递推公式为:
2018-04-08 面试搜狐汽车部门的经历
一面比较简单。 二面的时候面试官问了我一个HashMap的问题,问我HashMap扩容有没有上限,我说有,他又问到上限了会怎么样。我说会抛异常吧。。。 说完他好像都想笑了,当时确实懵了。还问了HashMap扩容的同时如果put东西会怎么样,答得也不好。感觉源码还是读的不够。 然后他问了几个网络的问题,答得都不是很好。让我解释TCP拥塞控制的过程,答得磕磕绊绊,他说你是不是记不清了,我说是。 印象比较深的大概就这些吧,其他的都很普通的问题,多线程什么的也没有问。感觉那个HashMap的问题确实很不应该答错。可能又凉了一个,捉急。
2018-03-30 面试粉笔网的经历
一面的时候先让写了堆排序,然后让简单地解释了一下。然后问一些大众的问题,三次握手、JVM数据库索引之类的、浏览器上输入url经历的过程等等。 最后让我写一个线程安全的生产者消费者的模式。写的不好,感觉多线程这块理解得还是很不好。 简历上写了Redis,结果被问了好多Redis的问题。 Redis的持久化,比如Redis的持久化方式,没有答上来。回来之后才查出来是AOF和RDB。RDB是快照式的持久化。 AOF是记录操作,恢复数据的时候把指令再执行一遍即可。 还有Redis的跳表怎么用,回答不知道。还有一个题是生产者消费者模式,保证线程安全的情况。我答得也不好。 三面的时候让我说synchronized的底层实现,没有说上来,又问了几个简单的问题,让我写了一个不太难的算法,但是写的也不太好。 还有一个问题是wait和notify的写法,我写的是 if (…),但是好像应该是while (…)。最后是凉了。
2018-03-27 LCA问题
二叉树最近公共祖先问题:一棵树根节点root,两个节点u和v,求最近公共祖先问题 如果是二叉搜索树:则如果root在u和v之间,则返回root;如果root比u和v都大,则取root的左子树找 样例代码如下
2018-03-27 Java线程池设置问题
线程池优点:1.降低资源消耗:创建线程和销毁线程都会消耗资源 2.提高相应速度 3.提升线程可管理性
2018-03-22 最长递增子序列
DP
2018-03-22 最长公共子序列
DP
2018-03-11- TCP三次握手 四次挥手
三次握手: 一些标识位: 1.SYN:建立连接。如果SYN=1而ACK=0则表示这是一个连接请求。如果SYN=1而ACK=1则表示同意连接 2.ACK:响应 3.FIN:关闭连接。
2018-03-11- MySql 锁
MySql大致分为一下三种锁: 1.表级锁:开销小,并发度低 2.行级锁:开销大,并发度高 3.页级锁:介于表级和行级之间
2018-01-15-Java GC something
从年轻代空间回收内存称为Minor GC,从老年代回收内存是Major GC,Full GC 是清理整个堆空间。
2017-11-10-堆排序 归并排序
堆排序的代码如下:
2017-11-02-Java..
- Java里子类override父类的方法时不能缩小父类方法的可见性
- interface的可见性是public和default。
2017-09-04-线程池
- Executor是接口,有execute方法,参数是Runnable。
- ExecutorService也是接口,继承了Executor接口,一个Executor有三种生命周期:运行、关闭和终止 Executor的shutdown方法不会阻塞,线程池会继续运行直到所有任务执行完
- Executors类:提供一系列工厂方法用于创建线程池:如newFixedThreadPool(int threads), newCachedThreadPool(), newSingleThreadExecutor(), newScheduledThreadPool(int corePoolSize).
- ThreadPoolExecutor是类,有很多参数,构建定制的线程池。
一条Sql语句索引失效的问题
MySql 5.7.15,Sql语句如下:
摩尔投票法
一个题:给定N个数,求出现次数大于N/2的数字,要求时间复杂度为O(N),空间复杂度为O(1)。
MySql 索引
索引的类型:
- 普通索引
- UNIQUE索引
- Primary索引
MySql 执行计划
在sql语句前加上 explain。得到的信息有10行:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra。
Leetcode 134:Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i].
Lambda表达式
Lambda表达式是Java 8中引入的,为Java添加了缺失的函数式编程特点。 Lambda表达式是一种匿名函数,通常用 >(argument) -> (body)语法书写。
Trie树
Trie树,即字典树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是最大限度地减少无谓的字符串比较,查询效率比较高。
MySql 读写分离配置2
在配置还MySql的主从同步之后,可以进行Mysql的读写分离。
MySql 读写分离配置1
首先要配置好MySql的主从同步。
2017-06-13 Java并发学习-ThreadLocal
ThreadLocal提供了线程本地变量,可以保证访问到的变量属于当前线程,每个线程都保存一个变量的副本。当工作于多线程的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供一个这个变量的副本。因此每个线程都可以独立使用自己的变量, 而不用管其他线程。 ThreadLocal对外提供了4个方法, 他们的作用如下:
2017-05-31 Java字符串
Java里字符串存在于两个地方:字符串常量池和堆中。 如果 String str = “Hello” 则str在常量池中。如果 String str = new String(“Hello, world”),那么str在堆中,但是常量池里也会创建”Hello,world”。
2017-05-17 Java并发编程学习2
volatile关键字
2017-05-17 Java并发编程学习1
synchronized关键字可以修饰变量、方法和代码块块。synchronized是互斥锁,至多有一个线程可以拥有它。 当一个线程访问object的一个synchronized(this)代码块时,另一个线程仍然可以访问该object的其他非synchronized(this)代码块。 而当一个线程访问object的一个synchronized(this)代码块时,其他线程对该object的所有synchronized(this)代码块的访问均将被阻塞。因为这个线程获得了这个object的对象锁。 当synchronized修饰static方法时,第一个访问这个方法的线程获得的是这个类的Class锁
2017-04-29 编程题-不等式数列
度度熊最近对全排列特别感兴趣,对于1到n的一个排列, 度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 ‘>’ 和 ‘<’ )使其成为一个合法的不等式数列。 但是现在度度熊手中只有k个小于符号即(‘<’‘)和n-k-1个大于符号(即’>’), 度度熊想知道对于1至n任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列。
2017-04-16 编程题-通过考试
小明同学要参加一场考试,考试一共有n道题目,小明必须做对至少60%的题目才能通过考试。考试结束后,小明估算出每题做对的概率,p1,p2,…,pn。你能帮他算出他通过考试的概率吗?
RESTful的一些学习
REST - Representational State Transfer 将网络所有信息/服务看成资源。 对资源的操作用HTTP协议提供的GET、POST、PUT、DELTE方法进行。 —- 一些定义:
- 直观简短的资源地址:Url
- 传输的资源:JSON、xml等
- 使用标准方法(GET、POST、PUT、DELTTE等)
LeetCode-Word ladder 1
Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that: Only one letter can be changed at a time Each intermediate word must exist in the word list For example,
判断链表是否有环的问题
一个常见的有关链表的问题:如何判断一个单链表中是否存在环
2016-9-18 同学去滴滴面试的一道算法题
题目是这样的,对于一个自然数N,如果N为1或者素数,则和为N;否则N可以被分解为若干自然数之和,求最小的和。
LeetCode 题解31:Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
面试京鸥文化(实习)
考研复试终于结束了,迫不及待地开始找实习了,这家公司是第一个给我发面试邀请的。
算法题解4_最长公共子序列
如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中, 则字符串一称之为字符串二的子串。
LeetCode题解34:Search for a Range
Given a sorted array of integers, find the starting and ending position of a given target value.
LeetCode题解22:Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
第一次面试的经历
面的是涂鸦移动,一家做手游的公司,在五道口。一面面的还行,二面崩了
LeetCode 题解3:Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.
LeetCode 题解2:Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
算法题解3_栈的压入弹出序列
输入两个整数数列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出序列。假设压入栈的所有元素均不等。 如序列 1,2,3,4,5是压入序列,则4,5,3,2,1可以是弹出序列,但是4,3,5,1,2就不能是弹出序列
算法题解2_求连续子数组的最大和
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1
算法题解1_求连续子数组的最大和
输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。
LeetCode 题解1:Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number.