VMware下的虚拟机网络设置(NAT、桥接、仅主机) 对于三种方式可以用一下的例子做个最后的总结:NAT模式:公司的员工连接公司的WIFI,然后通过公用的一个外网IP地址进行上网。桥接模式:他跟主机在一个网段,有自己的独立ip,相当于单独一台主机,跟主机处于同一级别,相当于同一层楼两家公司的其中一家。仅主机模式:这个就像公司的外网断掉,公司的员工通过局域网的方式,相互之间通信、资源访问。但是就是不能访问外网。
在安装Centos时如何选择磁盘的分区? 在这个结构图最重要的就是盘片和磁头,由一个个盘片叠起来组成,每一个盘片并不是结构图那样看起来很光滑的样子,其实是划分了很多的磁道(下图中的一圈圈灰色同心圆)。对比使用Windows的时候,系统会默认给分区成C盘、D盘、E盘等,所以当这里让我们自己选择分区的时候,就举手无措,只能每次按照默认的配置来选择,但是并不似每个默认的选择都适合自己的需求。可以看到一个磁头在盘片上进行转动,就像留声机运行时候的样子,所以在我们进行拷贝大文件的时候,会听到主机有很大的声音就是这里盘片快速转动,磁头在疯狂进行读写的操作。
MySQL的三层架构(连接认证、解析优化和存储引擎) 对于数据库的认识,相信很大一部分人像我一样只停留在写各种SQL、优化各种查询语句以及索引的建立之上,只是停留在“会用”的基础上。但是如果想要充分发挥MySQL的性能,就必须要了解其作为最流行的关系型数据库背后的各种优秀设计思想和特点,只有这样才能更好的使用它。目前最普遍的认识是将MySQL分为三层,正如标题所写的连接认证,解析优化和存储引擎。每一层的作用各不相同,但是各个之间是相互协同,相互依存的关系。可以先看下图的各个组件协同工作的架构图,然后再来深入分析各层之间的作用。一、连接认证 ..
设计模式之单例模式(指令重排,DCL) 虽然单例模式被认为是设计模式中最简单的一种模式,但是在面试的时候也是最容易被问到的知识点。单例模式属于创建型设计模式中的一类,专注于提供一种专属类自己负责创建对象的一种方式。之所以有这种方式,是因为有的场景下需要整个运行环境中只存在一个对象,例如Redis的连接、Mysql的发号器(全局生成唯一ID)以及我们常用Windows的任务管理器。实现单例模式方式也很简单,主要分为两步骤——私有化构造函数以及提供获取单例的方法。但是具体实现中又分为两类——饿汉模式和懒汉模式。两者...
SpringSecurity中的集群会话Session存在的问题以及解决方案(保持、复制、共享) 在初步了解Session的时候,我们就知道Session通常是保存在服务器的内存当中的。每一次客户访问都会携带SessionId,然后在服务器的内存中寻找。虽然这种方式简单快捷,但是仍存在比较明显的缺点。服务器的内存是有限的,所以留给Session的空间不多,因此一旦用户的访问量比较多时内存就会捉襟见肘。而且因为session是存在内存当中,并不是持久化存储,就算服务器性能特别好,但是也不免存在服务器的异常停止和重启,这个时候就会导致会话状态的丢失。
Spring Security中的会话【Session】管理与防御以及会话的并发控制 众所周知,HTTP本身是没有任何关于当前用户状态的内容,也就是两个HTTP请求之间是没有任何的关联可言,用户在和服务器交互的过程中,站点无法确定是哪个用户访问,也因此不能对其提供相应的个性化服务。Session的诞生就是为了解决这一个难题,提供了无状态的HTTP请求实现用户状态维持的方案——服务器和用户之间约定每个HTTP请求携带一个ID信息【代表当前用户信息】 服务器通过与用户约定每个请求都携带一个id类的信息,从而让不同请求之间有了关联,而id又可以很方...
SpringSecurity的记住登录实现过程———【RememberMeServices】分析过程 在上一篇文章《SpringSecurity的认证流程分析(各个组件之间的关联)》介绍认证的基本流程时,其中的AbstractAuthenticationProcessingFilter有这样一个属性——RememberMeService引起我的注意,虽然从字面上很容易理解这个属性是和记住登录有关。但是其中的实现过程又是如何不深入还真不清楚,所以秉着学习的态度专门了解一下Security中对这个功能的实现。 在了解之前,先要清楚为什么会需要这个类来实现?当我们在很多网站上注册...
SpringSecurity的认证流程分析(各个组件之间的关联) 我一开始对于SpringSecurity也不是很熟悉,但是Security 作为一个Spring家族中的安全管理框架,而且每个项目都有授权、认证、鉴权等功能,所以很有必要对Spring Security了解清楚。在说明各个流程之前,找了一张关于它的架构,我只截取了其中关于认证这一部分的内容。由上图可以清楚的看到在Security 认证的过程涉及到的对象,以及各个对象之间的关联。对于刚入门Java Web开发的时候,Filter作为JavaWeb的三大组件之一给我们留...
Hive的SQL执行效率优化 Hive的优化① 工作中针对数据去重,能使用group by 就不使用distinct。使用group by 会使用多个Reduce进行处理。而distinct,所有的数据会在一个reduce中进行处理。②运行设置在每次运行Hive语句时,运行最开始之前都会输出一段话:Number of reduce tasks not specified. Estimated from input data size: 1In order to change the average load for
Hive中内部表、外部表、分区、分桶以及SQL的执行顺序 Hive的数据类型以及四种数据模型Hive的数据类型其实和关系型数据库的类型类似,也是包括几种类型,这里只做简单的介绍数值类型:tinyint (枚举值:0,1)、int、integer、bigint(长整型)浮点类型:float、double、decimal(涉及到金融中常用,保证了精度不丢失)时间类型:timestamp、date(字段命名的时候,如果与关键字重叠,必须使用反键号)字符串类型:string(工作常见)、varchar、char复杂类型:maps、structs、u
Hive入门、Hive vs SQL以及Hive的体系结构 HiveHive的本质其实就是MapReduce,是在MapReduce上的更高一层的应用,可以减少MapReduce的编写,之所以要引入Hive是因为有以下几个原因:1)对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一堆MapReduce代码。2)对于统计任务,只能由懂MapReduce的程序员才能确定。3)耗时耗力,更多精力没有释放出来。因此为了解决这些问题,Hive应用而生。...
Hadoop1.0 VS Hadoop 2.0 Yarn以及Yarn的容错能力 Hadoop 1.0 VS Hadoop 2.0在Hadoop1.0中有两个重要的角色JobTracker和TaskTracker,JobTracker主要负责分配工作和资源的调度,相当于一个管理者。而TaskTracker就是具体干事情的角色。而在Hadoop2.0中这两个角色都被新的三个组件所替换:ResourceManager、ApplicationManager、NodeManager。而今天的主角Yarn,其实就相当于一个分布式操作系统,主要是把Hadoop1.0中JobTracker的资
WordCount的理解与MapReduce的执行过程 WordCount的入门WordCount是最常见、最基本的一个需求,例如进行词频统计、用户访问记录统计。如果数据量非常小的情况下,使用单机、批处理的方式就可以很快得到结果。但是如果数据量非常大,数据量可能是10G、100G等等。这种情况下使用单机、批处理的方式就非常低效率。所以这个时候就需要借助于分布式的思想进行处理——使用集群进行处理。就拿词频统计来说,处理的过程步骤如下图。Input就是将需要进行处理的数据输入,输入后会经过Spliting操作,将输入的数据进行切分,将众多的数据划分成不同
基于FastDFS的文件管理服务 文件管理是每一个部分不可缺少的一部分,特别是一些相册网站、视频网站登过,文件管理服务是非常重要的一部分。开源的分布式文件系统有很多包括HDFS、MooseFS、FastDFS等,每个分布式系统各有各自的特点,但大体上的功能包括:文件存储、文件访问、文件同步,并且有些系统会帮我们解决大容量存储和负载均衡的问题。在这繁多的分布式系统中,我只了解过HDFS和FastDFS,两者的侧重点不同,HDFS是适合存储和管理大文件,不太适合存储海量的小文件、频繁的修改文件以及大量的随机读,HDFS经常用于大数据分析领域,而
基于Canal实现数据库与Redis缓存中的数据同步问题 在之前文章《如何用Lua脚本基于OpenResty、Redis实现数据的缓存?》中介绍了一种简洁实现数据缓存的一种方式。但是对于数据缓存还有一个重要的事就是可能存在数据的不一致问题。就拿上篇文章中的广告来说,临时更换广告内容或者下架广告的场景下,如果不立刻更新缓存中的数据而是任由其等到失效时间过后重新获取,这就有可能造成很严重的后果。所以要在极短的时间内实现缓存与数据库中的数据相一致。这里又介绍一种有局限性的解决方案——基于Canal。所谓的局限性就是因为Canal本身只是针对于Mysql,所以也只能实现M
如何用Lua脚本基于OpenResty、Redis实现数据的缓存? 也许有人对于OpenResty不太熟悉,但是一说到Nginx,可能都有所了解。作为控制速率和并发量控制的Nginx被很多公司所采用,而OpenResty就是在Nginx的基础上升级的,提供了Lua扩展,大大提升了Nignx对并发的处理能力,可以达到10K~1000K。OpenResty其实和Tengine一样,都是基于Nginx的衍生版本,融入了各自一些业务的新特性。这里用一个例子来说明使用Lua脚本,通过OpenResty和Redis实现业务数据的缓存。一般商城系统都会包括各种各样的广告,对于首页的广
Scala面向对象 所有面向对象的语言,包括了三大特性: 封装:属性、方法都会被封装到类中 继承:父类和子类之间的关系【User extends Person】 多态:父类引用子类对象,这一特性是开发框架的基石所在。构造器在Scala中的构造器分为两种:主构造器、辅助构造器两种。主构造器主构造器是直接跟在Class后面的,与Java的构造器方式是不同的。基本语法如下:object DemoObject { def main(args: Array[Stri...
Scala方法与函数 Scala中有方法和函数两种,两者区别很小。Scala方法是类的一部分,而函数是一个对象可以赋值给一个变量。Scala中的函数则是一个完整的对象,Scala中的函数其实就是继承了Trait的类的对象。在Scala中使用val 语句可以定义一个函数,def语句定义方法。class FunctionMethodDemo { // 方法 def method(x: Int, y: Int) = x + y // 函数 val func = (x: Int, y: Int) => x +
为什么要用MapReduce以及MapReduce的切片 MapReduce的由来举一个熟悉的例子——WordCount,统计每个单词出现的次数。逻辑也非常简单——将文件中的每一行数据读取出来按照一定规则进行分割,然后把它放到一个HashMap里面,如果存在则value值+1,不存在则put进去并且value为1。实现逻辑很简单,但是数据量一大的话,单机版的实现就不太现实,因为有以下几个问题:1)文件的存储。单机的存储是有限的,而文件的大小可能是无上限的增长,例如日志文件,即使你按照每天输出,但是总的日志文件大小依然在持续增长,大小可能由2T到10T等