自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

转载 经典大数据问题分析

1、海量日志数据,提取出某日访问百度次数最多的那个IP。  此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。  再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1...

2018-07-24 10:51:59 617

原创 怎么找到数组里的第二大的数

如果仅仅是考虑实现功能,而不考虑时间效率,可以先通过排序算法将数组进行排序,然后根据数组下标来索引访问数组中第二大的数,最快的排序算法一般为快速排序算法,但是其时间复杂度仍未O(nlogn),根据下标访问数组需要遍历一遍数组,时间复杂度为O(n),所以总的时间为O(nlogn)。       有没有更好的方法降低时间复杂度呢?答案当然是有的。可以只通过一遍扫描数组即可找到第二大数,即通过设置两...

2018-07-24 10:50:34 1575

原创 阿里java开发一面 面试题及个人解析答案

1:  自我介绍 自我介绍首先描述自己的基本情况,其次是描述自己的技术亮点,做过的亮点项目或产品。如果没有做过有技术亮点的事,每天都在做增删改查功能或重复性的工作,需要好好反思下,这样下去技术上没有多少增长。如果工作中就是做这个怎么办?可以考虑利用业余时间参与开源项目或自己做一些工具或框架。    2:  HashMap怎么解决Hash冲突的HashMap的数据结构是:数组Node[]...

2018-07-24 10:47:07 17072 3

转载 Thread.Sleep原理

我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然...

2018-06-21 15:27:44 1022 2

原创 Spring Cache无效的问题以及解决办法

昨天碰到Cache无效的问题,现在已经找到原因并且解决。把知识分享给大家,免得以后踩坑。@Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接口里面,否则cache无效。具体的原因是, Spring把实现类装载成为Bean的时候,会用代理包装一下,所以从Spring Bean的角度看,只有接口里面的方法是可见的,其它的都隐藏了,自然课看不到实现类里面的非接口方法,...

2018-05-03 14:36:06 721

转载 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?

B代表药水,M代表老鼠;Mn代表老鼠正常,Mn'代表老鼠死亡;Bn代表药水正常,Bn'代表药水有毒;1. 最显而易见的答案是:1000只,每只对应一瓶药水,M1 => B1 , M1' => B1'……。但我们相信还会有更好的答案。2. 既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?这是一个很好的思路。我们考虑喝两瓶的情况:此时老鼠的生死有四种情况:...

2018-05-03 14:33:32 6502

原创 java的一些锁

1、自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁2、阻塞锁 被阻塞的线程,不会争夺锁。3、可重入锁 多次进入改锁的域4、读写锁5、互斥锁 锁本身就是互斥的6、悲观锁 不相信,这里会是安全的,必须全部上锁7、乐观锁 相信,这里是安全的。8、公平锁 有优先级的锁9、非公平锁 无优先级的锁10、偏向锁 无竞争不锁,有竞争挂起,转为轻量锁11、对象锁 锁住对象12、线程锁13、锁...

2018-04-04 01:14:11 119

转载 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。CountDownLatchCountDownLatch是一个计数器闭锁,主要的功能就是通过await()方法来阻塞住当前线程,然后等待计数器减少到0了,再唤起这些线程继续执行。 这个类里主要有两个方法,一个是向下减计数器的方法:countdown(),其实现的核心代...

2018-04-04 01:01:16 125

转载 坑人无数的Redis面试题

Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难。作为一名在互联网技术行业打击过成百上千名【请允许我夸张一下】的资深技术面试官,看过了无数落寞的身影失望的离开,略感愧疚,故献上此文,希望各位读者以后面试势如破竹,永无失败! Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合Sort...

2018-04-03 17:42:04 203

原创 Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

一、重量级锁  上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchroniz...

2018-04-03 01:20:19 119

转载 Java并发编程:Synchronized及其实现原理

一、Synchronized的基本使用  Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法:  (1)修饰普通方法  (2)修饰静态方法  (3)修饰代码块  接下来我就通...

2018-04-03 01:18:51 111

转载 RPC原理及实现

RPC概述RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。现在互联网应用的量级越来越大,单台计算机的能力有限,需要借助可扩展的计算机集群来完成,分布式的应用可以借助RPC来完成机器之间的调用。RPC框架原理在RPC框架中主要有三个角色:Provider、Consumer和Regist...

2018-04-01 21:59:23 376

转载 MQ消息中间件介绍

首先MQ是什么?MQ是Message Queue消息队列的缩写。消息队列是一种应用程序对应用程序的通信方法、应用程序通过写和检索入列队的针对应用程序的数据(消息)来进行通信,而不需要专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信,队列的使用除去了接收和发送应用程序同时执...

2018-04-01 21:58:00 325

原创 Zookeeper的功能以及工作原理

1.ZooKeeper是什么?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户2.ZooKeeper提供了什么?1)文件系统2)通知机制3.Zookeeper文件系统每个子目录项如 NameSer...

2018-04-01 21:55:52 118

转载 spring-boot是什么

1. 什么是springbootSpring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。spring大家都知道,bo...

2018-04-01 21:54:20 4625

转载 分布式缓存Redis使用心得

一、缓存在系统中用来做什么 1. 少量数据存储,高速读写访问。通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。 2. 海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。Redis3.0以后开始支持集群,实现了半自动化的数据分片,不过需要smart-client的支持。 二、从不同的角度来详细介绍redis 网...

2018-04-01 21:52:15 137

转载 HSF的原理分析

一.HSF的基本概念HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。 二.知识准备通过以上的说明,大...

2018-04-01 21:50:30 237

原创 俩句话说清楚spring管理bean和依赖注入的原理

第一句,spring容器管理bean的原理:     创建一个类,定义构造方法的参数为bean.xml文件,然后通过dom4j去读取bean.xml文件,得到一个或者多个javabean(id,class)对象(如果是多个bean节点就创建一个list集合来存储读取到的bean节点),然后实例化bean的节点,从list中遍历出所有的bean节点,并通过反射去实例化bean,建立一个Map<...

2018-03-30 14:52:39 377

转载 Java中的多线程

引如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一些概念不够明确...

2018-03-30 14:48:26 83

转载 聊聊分布式事务,再说说解决方案

分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。数据库事务在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomicity )、一致...

2018-03-29 10:11:27 383

转载 hadoop、storm和spark的区别、比较

一、hadoop、Storm该选哪一个?为了区别hadoop和Storm,该部分将回答如下问题:1.hadoop、Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什么场景,什么情况下使用hadoop4.什么是吞吐量首先整体认识:Hadoop是磁盘级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数据直接通过网络导入内存。读写内存比读写磁盘速度...

2018-03-27 16:52:13 1089

转载 Kafka — 高吞吐量的分布式发布订阅消息系统

1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic、发送消息、消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafa consumer是否可以消费指定分区消息?8.Kafka消息是采用Pull模式,还是Push模式?9.Pr...

2018-03-27 16:50:42 593

转载 五句话了解区块链,扫盲系列

1.区块链解决了啥问题一个东西有价值,一定是解决了一个社会上的痛点。我们说人工智能是未来的趋势,因为它主要解决的是生产力的升级问题,工业革命代替人的简单体力劳动,人工智能代替的是例如思考之类的复杂劳动。区块链解决的是生产关系的问题,也就是信任的问题,想一下为什么淘宝需要有支付宝,因为如果没拿到货而直接付钱,卖家不发货怎么办?需要担保机制,这就是买卖间彼此不信任的问题。2.区块链的核心技术理论是啥?...

2018-03-27 16:40:10 1156 3

转载 MySQL的并发控制与加锁分析

本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read),四种隔离级别(isolation level)等作详细的阐述,并且基于一个简单的例子,对MySQL的加锁进行了一个详细的分析。本文的总结参考了何登成前辈的博客,并且在前辈总结的基础上,进行了一些基...

2018-03-27 16:38:44 120

转载 Java对象 64位指针压缩

通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不愿意看到的。幸运的是,从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。 什么是 OOP ...

2018-03-22 16:30:23 964

转载 JVM GC 机制与性能优化

1 背景介绍与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理。JAVA提供了垃圾回收器(garbage collector)来自动检测对象的作用域),可自动把不再被使用的存储空间释放掉,也就是说,GC机制可以有效地防止内存泄露以及内存溢出。JAVA 垃圾回收器的主要任务是:分配内存确保被引用对象的内存不被错误地回收回收不再被引用的对象的内存空间凡事都有两面性。垃圾回收器在...

2018-03-22 16:28:44 187

原创 一些java小知识

1、equals 和 == 有什么区别?==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true;2、抽象类和接口有什么区别?接口和抽象类的概...

2018-03-22 11:52:13 136

转载 HashMap与ConcurrentHashMap的区别

从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。从ConcurrentHashMap代...

2018-03-21 18:15:59 116

转载 WebX框架使用说明

前言 标准MVC开源框架有很多(Struts、SpringMVC、Webx),对于生活在开源世界里面的码农来说SpringMVC、Struts是接触比较多,也是最熟悉的框架。 知己知彼以配置SpringMVC为例,我们常常关注的点主要有以下几个方面:1.web.xml文件里面请求分配器的配置(DispatcherServlet)。如下图:拦截以do结尾的HTTP请求。 2.视图控制器(ViewRe...

2018-03-21 18:11:29 312

转载 ClassLoad的加载过程及分析

-Xbootclasspath:bootclasspath 让jvm从指定路径(可以是分号分隔的目录、jar、或者zip)中加载bootclass,用来替换jdk的rt.jar;若非必要,一般不会用到; -Xbootclasspath/a:path 将指定路径的所有文件追加到默认bootstrap路径中; -Xbootclasspath/p:path 让jvm优先于bootstrap默认路径加载指...

2018-03-21 17:55:52 672

原创 数据库的三范式

 首先,所谓的数据库,你可以理解为无数张excel表加在一起。1.第一范式:比如【性别】这个列名,绝大多数情况下无法再分;但是【所在地】这个列名,很多时候是可以根据你的需求往下分的,那么它在某些情况下就不符合第一范式。即所有表格的每一个列名都不可再分,同时与其它列名不重复。2.第二范式:比如我们为了评价一批苹果的好坏,给苹果上了编号1——10000。那么这个【编号】就是我们要描述的对象,其余的【颜...

2018-03-21 17:51:55 170

转载 Java中ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)     2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。      3.对于新增和删除操作...

2018-03-21 16:47:26 107

转载 进程和线程的区别?

进程和线程的区别?进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量...

2018-03-21 16:34:39 205

转载 线程池工作原理

线程池的优点1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。线程池的创建1 public ThreadPoolExecutor(int corePoolSize,2 int maximumPoolSize,...

2018-03-21 11:30:13 102

转载 TCP 为什么是三次握手,而不是两次或四次?

简单说,让双方都证实对方能发收。知道对方能收是因为收到对方的因为收到而发的回应。具体:1:A发,B收, B知道A能发2:B发,A收, A知道B能发收3:A发,B收, B知道A能收...

2018-03-21 09:52:06 175

转载 揭秘 HashMap 实现原理(Java 8)

HashMap 作为一种容器类型,无论你是否了解过其内部的实现原理,它的大名已经频频出现在各种互联网面试中了。从基本的使用角度来说,它很简单,但从其内部的实现来看(尤其是 Java 8 的改进以来),它又并非想象中那么容易。如果你一定要问了解其内部实现与否对于写程序究竟有多大影响,我不能给出一个确切的答案。但是作为一名合格程序员,对于这种遍地都在谈论的技术不应该不为所动。本篇文章主要从 jdk 1...

2018-03-21 09:39:45 152 1

转载 TCP和UDP的区别

TCP UDPTCP与UDP基本区别  1.基于连接与无连接  2.TCP要求系统资源较多,UDP较少;   3.UDP程序结构较简单   4.流模式(TCP)与数据报模式(UDP);   5.TCP保证数据正确性,UDP可能丢包   6.TCP保证数据顺序,UDP不保证   UDP应用场景:  1.面向数据报方式  2.网络数据大多为短消息   3.拥有大量Client  4.对数据安全性无特殊...

2018-03-21 09:38:21 108

staruml画图工具 破解版下载

可以用于规划数据库设计,表设计,接口设计,做ppt分享

2018-09-13

空空如也

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

TA关注的人

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