自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划有感

在诸多算法中,我认为动态规划是其中上下限差距最大,也是最有魅力的一种算法,可以很难,很精妙,如鸡蛋掉落;也可以很简单,如斐波那契数列;也可以很经典,如LIS,LCS;也可以很复杂,如数字0-9的数量等等。针对于动态规划,经过一段时间的刷题做个简单的总结。动态规划的关键是状态及转移,而核心则为无后效性,如果有后效性则无法使用动态规划求解。第一步是进行分析,将题目中隐晦的逻辑进行简化或者转化,这点可以说是经验与知识的积累;第二步则是抽取出题目提到的状态,比如股票买卖系列中的,每天的收益,这里天,收益都

2020-11-08 15:37:41 185 1

原创 KV存储-Cellar和Squirrel

1、集群架构整体来看,Cellar是存在代理节点,Squirrel完全是去中心化。1.1、如何保证一致性,保证的什么层次的一致性Squirrel是弱一致性,使用的是gossip协议,Cellar是最终一致性,使用了raft协议。1.2、如何保证可用性Squirrel使用一个分片下多个副本,master宕机,slave立刻顶上去Cellar同样基于分片bucket来实现多副本1.3、如...

2020-05-12 23:53:50 1677

原创 好文收藏

保存一些看过的好文章,防止下次翻阅的时候找不到。1、关于Redis的一些思考和总结2、关于服务器性能的思考

2020-04-08 17:34:52 241

原创 关于序列化的一点思考

最近对序列化进行了一下深入的思考,以前一直没怎么在意这个点,发现还是有一些收获,写篇简单的笔记记录一下。这里有篇文章讲的不错、1、什么是序列化在程序中怎么获取对象某个字段的值:对象在JVM中的存储布局可以分为对象头,实例数据,字节对齐三部分,我们知道Java万物皆引用,所以可以通过这个引用去jvm里找到对象的实际位置,然后再计算出字段偏移量,根据字段的大小,读取对应大小的字节,就可以取到...

2020-03-24 18:45:32 395 1

原创 从SQL到DSL简析ElasticSearch结构化查询

最近项目里有用到ES,顺便简单学习了一下基础的查询以及执行过程,对比是一种很好的学习方法,所以我们先从一个熟悉的SQL开始:SELECT COUNT(DISTINCT a), AVG(a) ...FROM tWHERE a BETWEEN (1, 10) AND b = 2 OR c = 3GROUP BY a, b, cHAVING a > 3ORDER BY bLIMIT ...

2019-12-01 16:26:42 729

原创 Java常用容器总结

在工作中经常会碰到需要各种容器的场景,Java为我们提供了很多的容器,本文将对常用的一些容器做一个总结。从Java的集合继承关系图中我们可以看到Java的容器一共分为List,Queue,Stack,Set,Map这五种,其中List,Stack,Queue其实在逻辑结构上几乎没有区别,Stack比较特殊,因为在实际开发中几乎不会被用到,不对Stack做相关总结。一、List非线程安全的L...

2019-11-09 17:47:38 326

原创 《The programmer's Guide to Apache Thrift》读书笔记

所有代码见GitHub:Thrift Demos第一章 Introduction to Apache Thrift本章详细介绍了thrift的一些特点,优点,不足,以及简单的Java,Python,C++客户端,服务端Demo,本次阅读主要针对于Java相关的进行学习,C++和Python都是类似的,直接跳过。优点:跨语言;开发效率高;提供插件序列化协议;性能可观;灵活扩展性好缺点:不支持...

2019-11-09 11:21:11 809

原创 查看日志文件常用命令

查看日志的文件的常用命令有,tail,head,cat,tac,more,less

2019-08-29 10:45:17 1903

原创 Shell入门

1. 定义在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。我的理解就是shell提供了一种直接与OS进行交互的手段。2. 应用场景用于集成Linux命令,比如进行项目上线部署过程中可能需要执行一系列的Linux命令,每次都执行一次就很...

2019-08-13 21:12:51 208

原创 CountDownLatch和CyclicBarrier

1. 定义CountDownLatch提供了一个栅栏,在这个栅栏这里有n个线程等待另外m个线程完成任务的一个组件。CyclicBarrier提供了一个屏障,保证n个线程全部到达这个屏障之后,再继续执行后续的代码。2. 对比二者语义有所不同,CountDownLatch提供的n个线程等待m个线程的组件,而CyclicBarrier提供的是一个对n个线程进行步调调整的组件。CountDow...

2019-08-02 00:08:22 557

原创 Future,FutureTask,CompletableFuture

Java中线程的实现方式一般有实现Runable接口,实现Callable接口,继承Thread类三种。而Runable和Thread的run方法都是void,也就是没有返回值,所以这种情况下获取线程的返回值就要使用线程间通信的手段,一般比较麻烦,基于Future有两种方式可以获取线程的返回值,比较方便。使用Future+Callable的形式,用Future接受Callable任务的返回值...

2019-07-25 23:36:04 1108

原创 CS:APP Data Lab

《深入理解计算机系统》这本书每章后面都有配套的CMU的课后lab,难度还是很高的。做这些lab一方面能够让自己更加深入理解本章的内容,看不如做。本章的Data Lab限制了我们的编程方式,比如不让使用if,while等,让我们能够从不同的角度去思考问题,解法不唯一,但是这些解法带给我们的灵感是非常珍贵的。第一部分是关于整数的题目,这部分限制只能使用0x00 - 0xff大小的常数,一般只允许使...

2019-06-16 15:32:42 628

原创 ReentrantReadWriteLock源码(jdk1.8)

ReentrantReadWriteLock是一个可重入读写分离锁,可以认为是在ReentrantLock上的扩展,但是二者没有继承关系,相比于ReentrantLock将读和写分离,读读不互斥,可以提高并发环境下的效率,同样也是基于AQS实现,源码比ReentrantLock要复杂一些,最好能了解AQS源码。ReentrantReadWriteLock内部有Sync,NoNofairSync,...

2019-04-07 20:41:09 1005

原创 ReentrantLock源码(jdk1.8)

ReentrantLock比较常用的一个锁,基于AQS实现,支持可重入性,公平锁和非公平锁两种模式。ReentrantLock的可重入性是通过对同步状态值state进行累加实现;ReentrantLock有三个内部类,分别是Sync,NonfairSync,FairSync他们的继承关系如下图所示,ReentrantLock持有一个Sync类型的引用,根据多态的思想,在公平锁和非公平锁模式下,分...

2019-04-06 20:36:14 291

原创 AQS源码(jdk1.8)

AQS(AbustactQueuedSynchronizer)队列同步器是Java同步的基础组件,ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier,Semaphore等都是基于AQS来实现的,了解AQS的源码对于多线程编程还是有一些帮助,也可以实现自定义的同步组件。AQS使用了模板方法设计模式,提供了独占锁/共享锁...

2019-04-04 19:12:21 682

原创 LinkedHashMap源码(jdk1.8)

LinkedHashMap继承自HashMap,建议先学习HashMap源码,然后再学习LinkedHashMap源码,HashMap源码,这样会快很多。LinkedHashMap继承了HashMap,所以大体上是仍然是HashMap的结构,但是在内部实现增加两个指针来构成一个双向链表来维持顺序,同时提供了两种可选择的顺序。LinkedHashMap与HashMap的面向对象设计思想很值得学习,...

2019-03-25 12:03:06 189

原创 《深入理解Java虚拟机》读书笔记之高效并发

并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。Java内存模型Java的内存模型主要是分为主内存和工作内存,此处的划分和内存管理部分的不是一个层面的。Java的内存间交互采用lock,unlock,read,load,use,assign,store,write这八个指令完成。lock:作用于主内存变...

2019-03-17 19:19:12 205

原创 《深入理解Java虚拟机》读书笔记之程序编译与代码优化

从计算机程序出现的第一天起,对效率的追求就是程序天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。Java代码的三种编译过程将*.java文件转变为 *.class文件,如Javac将*.class文件转变为转变为机器码,如HotSpot的C1,C2编译器直接把*.java文件编译为本地机器代码,如GCJ编译器Jav...

2019-03-16 17:08:36 374

原创 头条2019.3.16笔试题

这次头条笔试题比之前简单多了。。终于全部过了找钱问题,共1024,64,16,4,1几种面值。因为1,4,16,64这几种面值都可以由小于他们的面值凑出来,所以直接贪心的选最大的面值就好。import java.util.*;public class Main implements Runnable{ private final int mod = 1000000007, ...

2019-03-16 12:15:56 3038 4

原创 《深入理解Java虚拟机》读书笔记之虚拟机执行子系统

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Class文件结构(Class文件结构比较复杂,具体的表结构需要的时候自行查阅即可)Class文件结构采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号数和表。无符号数属于基本数据类型,比如u1,u2,u4,u8分别代表占一个字节,两个字节,四个字节,八个字节的无符号数,...

2019-03-15 17:46:17 220

原创 《深入理解Java虚拟机》读书笔记之自动内存管理机制

Java和C++之间有一堵由动态内存分配和垃圾收集技术所围成的“高墙”,强外面的人想进去,强里面的人却想出来。Java内存分区由图中可以看到,JVM内存主要分为方法区,虚拟机栈,本地方法栈,堆,程序计数器。程序计数器(PC):是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器;是线程私有的;如果执行native方法,则pc的值为空,这块内存不存在内存溢出。Java虚拟...

2019-03-15 12:46:36 249

原创 HashMap源码(JDK1.8)

HashMap继承了AbstractMap<K,V>类,实现了Map<K,V>,Cloneable,Serializable接口,底层由数组+链表和红黑树(jdk8之前没有红黑树)来实现。源码需要关注的主要是构造函数,hash函数,put/get函数,resize函数,remove函数,clear函数等,以及内部字段。基本字段transient Node<K,...

2019-03-14 21:19:17 236

原创 树的直径(最长的简单路径)

题解:分析一下,由于是树,所以两点之间的路径有且只有一条,为了求出欧拉路,所以必然会向回走,从递归的角度来看,假设x看作一个树根,有t个孩子y1…yt。其中每个孩子为根的子树欧拉路都加起来,然后去掉最长的两条欧拉路作为起点和终点。所以其实就是所有边权重之和的二倍减去树的直径(即树中最长的简单路)。所以此题的关键是求出树的直径,算是经典问题之一,有两种方法。树形dp:dp[x]表示经过x的最长...

2019-02-17 13:00:44 2266

原创 dfs序列思想+LIS Java扩栈

原题链接:https://ac.nowcoder.com/acm/contest/368/B题解:直接从树的角度解决很难,因为不属于一种常用的树形数据结构,考虑dfs的序列的思想,可以将此问题转化为,求出根右左的dfs序列,然后对这个序列求最长上身子序列(LIS)即可解决,复杂度O(nlogn)。需要注意的这个题,用Java写会再dfs的时候,会出现JVM栈溢出,所以只能通过90%,需要扩栈...

2019-02-15 17:33:51 352

原创 树形dp,拆位思想学习

过年了,最近甚为咸鱼,赶紧来练练代码,顺便练练用Java写算法(写的好慢。。)https://ac.nowcoder.com/acm/contest/370/C签到题,只需要记录每行,每列最新的记录,然后对于一个点(x,y)求x行和y列刷新的最大值即可,复杂度O(mn)import java.util.Scanner;public class Main{ static pr...

2019-02-10 11:47:57 328

原创 美团笔试题(2018.10.09)

逻辑题20个要快点做,然后30个选择考的东西比较多。编程两个。优惠券有一个满x减的优惠券,一共n个商品,每个只能选择一次,求能使用优惠券的最小价格。就是求n个数选任意几个加起来最接近x且大于等于x的数。1<x<100001<n<100,每个商品价格小于等于100。思路:暴力枚举是2^100,但是由于数据范围的原因,可以处理出x+100以内所有可达(能凑出)的...

2018-10-10 11:39:12 3310

原创 京东2018.9.9笔试题

给n个点,m条边,问是不是一个完全多部图,意思就是能不能分成k组,每组之内两两点没有边连接,但是组之间,任意两点都是有边连接的。直接做不好做,但是发现如果取巧,将原图连通的边看作不连通,不连通的边看作连通,然后用并查集分块,这样每个块内间两点都是必然有边的,此时判定块内所有边是不是不连通的就好了。每次的复杂度都是O(n^2).代码:#include<iostream>#inc...

2018-09-17 19:21:07 393

原创 MySQL的四种常用存储引擎

MySQL有很多的存储引擎,这里写一下四种比较常用的存储引擎InnoDB,MYISAM,Memory,Archive。InnoDB是MySQL的默认存储引擎,也是事务性数据库的首选存储引擎,主要有以下几个特点: 1.存储结构:InnoDB将表中的数据存储在表空间上,表空间中包含若干个段,段中有区,区中有很多页,每一个页有16k,页中存取很多行记录。存储的时候是按照主键排序的。 2.建立缓存...

2018-09-04 18:31:50 2198

原创 Nginx简述

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx的主要作用有:负载均衡、反向代理、动静分离、访问控制。负载均衡:在高并发的情形下...

2018-08-27 16:03:26 365

原创 RabbitMQ入门

MQ(message Queue)是一种进程间通信的方式,在分布式系统中作为消息中间件也发挥着很重要的作用,主要能够使系统的耦合性降低,同时也是异步的,也可以实现数据一致性。故常见的应用场景有异步处理,应用解耦,流量销锋,日志处理。RabbitMQ是一种常用的消息中间件,在AMQP基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。他的优缺点主要是遵...

2018-08-24 17:43:52 587

原创 进程间通信的方式

进程间通信的方式大概有以下几种: 1. 共享内存:顾名思义,共享内存就是两个进程同时共享一块内存,然后在这块内存上的数据可以共同修改和读取,达到通信的目的;共享内存是最快的ipc方式;共享内存常与信号量进行配合使用,信号量是一个控制资源访问的标识符,简单来说就是一个计数器,通过信号量能实现锁以及著名的pv操作等,主要是用来实现进程间同步。 2. 无名管道:无名管道是半双工的通信方式;并且只能在...

2018-08-23 10:52:13 3788

原创 IP(网际协议)基础

在网络协议栈的第三层也就是网络层主要有三大组件,第一个组件是IP协议,包含着因特网中的编址和分组处理规则;第二个协议是选路组件,包含各种各样的选路协议;最后一个组件是ICMP协议,包含报告数据报中差错以及一些请求响应。首次可见IP协议在网络层中的重要性。一、IP协议 IP是英文单词Internet Protocol的缩写,中文含义为网络中连接的协议,简称网际协议。网际协议也就是为计算机网络相...

2018-06-06 11:17:45 2672

原创 JDBC基础

JDBC的概念 JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成,所以JDBC本质就是一些操作数据库的jar包。JDBC的作用 JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,JDBC是Ja...

2018-05-31 16:22:44 235

转载 常见协议端口号,功能以及基于UDP/TCP

转载自:http://blog.51cto.com/13445059/2061325TCP协议名称端口号套接字作用Telnet专司终端模拟23Tcp 23它为用户提供了在本地计算机上完成远程主机工作的能力SMTP简单邮件传输协议25Tcp 25它帮助每台计算机在发送或中转信件时找到下一个目的地HTTP超文本传输协议80Tcp 8...

2018-05-28 21:19:00 5617

原创 UDP(用户数据报协议)基础

UDP (User Datagram Protocol)用户数据包协议,是网络四层中另外一个重要的协议,用于处理数据包,是一种无连接的协议。UDP由于本来就不提供可靠数据传输,所以相对TCP来说就简单一些,主要了解协议的报文段结构,相比与TCP的优点。1. 报文段结构2. UDP相比与TCP的优点主要有两个方面的优点,一个是高效,UDP传输的效率比TCP要高的多,TCP需要建立连接,然后进行繁杂的...

2018-05-28 21:02:14 390

原创 Javaweb三大组件之Servlet

Javaweb开发中有很重要的三个组件分别是:Servlet,Filter,Listener。这些组件在Javaweb的开发中起着不同且至关重要的作用,而我们常用的web框架基本都是基于这些基础组件进行封装之后的用法,所以对于这些原生的方式进行Javaweb开发也要需要了解的,这样对框架的认识也能更加深入,理解为什么要那么做。1.Serlvet的广义概念Servlet是运行在服务器容器中的...

2018-05-24 11:16:06 1180

原创 Javaweb三大组件之Filter

1.Filter的广义概念Javaweb开发中第二个很重要的组件是Filter,它和Serlver非常相似,所以学习完Servlet之后学习Filter就会很快。Filter在Javaweb开发中担当的角色是一个过滤器,顾名思义就是对客户端的请求进行过滤,然后才发送给Servlet进行处理,差不多就是下图的所示样子。2.Filter的作用过滤器实际上主要担当一些切面的工作,比如登录...

2018-05-24 11:15:56 268

原创 Javaweb三大组件之Listener

1. Listener的广义概念顾名思义,Listener就是监听器,监听主要是对ServletContext,HttpSession,ServletRequest这三大域对象的创建和销毁事件监听,还有就是对域对象属性的操作监听,当监听这些事件发生是就会进行一些适当的操作。对于域独享属性操作的监听一般用的很少,主要介绍这三大域对象的监听器。2. Javaweb四大域对象域对象 ...

2018-05-24 11:15:43 385

原创 TCP(传输控制协议)基础

TCP(Transmission Control Protocol )传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,另外一个同样很重要的协议是UDP。TCP的特点:面向连接,全双工服务,可靠的,有序字节传输,接受发送有缓存,点对点,流水线,累积确认,快速重传,选择重传,流量控制,拥塞控制其实对于TCP大概就是两个方面的内容比较重要,一个是TCP的首部,第二个是TCP如何实现了可...

2018-05-22 11:07:41 1335

原创 HTTP(超文本传输协议)基础

HTTP(HyperText Transfer Protocol)超文本传输协议

2018-05-09 14:23:52 346

空空如也

空空如也

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

TA关注的人

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