版本号

答应我,不会这些概念,简历不要写 “熟悉” zookeeper

扶醉桌前 提交于 2020-03-31 21:34:02
整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问分库分表怎么办?你可以这样怼他 一口气说出 6种 @Transactional 注解失效场景 基于 Java 实现的人脸识别功能(附源码) 9种分布式ID生成之美团(Leaf)实战 唠唠叨叨 本文主要分享一下 zookeeper 的一些基本概念,在正式进入正题前,和大家聊一聊刚入行时我的面试经验,可以说是耿直的有些可爱。 面试官 :用过 zookeeper 吗? 我 :用过啊,给 dubbo 提供服务的注册与发现嘛 面试官 :知道 zookeeper 是什么吗? 我 :知道啊,注册中心嘛 面试官 :那你们项目中都是怎么用 zookeeper 的? 我 :就在 springboot 的 application.properties 配置文件里添加一个 zookeeper 服务地址就行了。。。 . 上边的对话好像也没什么毛病,但似乎又感觉哪里有点不太对,结果就是每次我如此回答面试都被pass。 为什么会被问zookeeper?因为我的简历项目上写着熟练使用zookeeper,可面试官理解的 “熟练” 使用可不是会配置,工程启动不报错那么简单

CAS -- ABA问题的解决方案

点点圈 提交于 2020-03-31 13:05:55
CAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronized同步锁的一种乐观锁。 其原理是CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 我们现在来说什么是ABA问题。假设内存中有一个值为A的变量,存储在地址V中。 此时有三个线程想使用CAS的方式更新这个变量的值,每个线程的执行时间有略微偏差。线程1和线程2已经获取当前值,线程3还未获取当前值。 接下来,线程1先一步执行成功,把当前值成功从A更新为B;同时线程2因为某种原因???被阻塞住,没有做更新操作;线程3在线程1更新之后,获取了当前值B。 为什么线程3又反过来操作???是自旋吗??? 在之后,线程2仍然处于阻塞状态,线程3继续执行,成功把当前值从B更新成了A。 最后,线程2终于恢复了运行状态,由于阻塞之前已经获得了“当前值A”,并且经过compare检测,内存地址V中的实际值也是A,所以成功把变量值A更新成了B。 个人见解: 不是说一定出现ABA情况,是说有出现这种情况的可能性。也就是举一个特例来说明问题的可能性??? 看起来这个例子没啥问题,但如果结合实际,就可以发现它的问题所在。 我们假设一个提款机的例子。假设有一个遵循CAS原理的提款机

helm安装EFK

断了今生、忘了曾经 提交于 2020-03-31 10:18:15
原文地址: 点这里 1. 系统环境 确认heml镜像源并更新镜像仓库 2. 快速安装EFK 2.1 helm安装elasticsearch 2.2 helm安装fluented 2.3 helm安装kibana 2.4等待服务都起来,访问界面即可 3. helm安装EFk详细步骤 3.1 helm安装elasticsearch详细步骤 3.2 helm部署Fluent 3.3 helm部署Kibana 3.4等待服务都起来,访问界面即可 kibana报错1:版本不匹配 0. 简介   之前相信大家听过ELK工具栈,E: elasticsearch、L:logstash、K: kabana,其中logstash的缺点太重量级,Logstash性能低、资源消耗比较多、并且不支持消息队列缓存及存在数据丢失等问题,随后就有Fluentd出现,相比它更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为logstash的替代方案,亚马逊称其为数据收集的最佳方案EFK。 1. 系统环境 系统版本号CentOS 7.6 docker Client版本号18.09.7, Server版本号18.09.7 k8s版本号v1.16.2 helm Client版本号v2.13.1,Server版本号v2.13.1 确认helm镜像源并更新镜像仓库 [root@ops1 test]#

nodejs学习笔记

冷暖自知 提交于 2020-03-30 03:29:02
本文内容摘自 七天学会NodeJS ,摘抄内容只是本人觉得比较重要或者还没有理解的 模块 编写稍大一点的程序时一般都会将代码模块化。在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。 在编写每个模块时,都有 require 、 exports 、 module 三个预先定义好的变量可供使用。 require require 函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。模块名可使用相对路径(以 ./ 开头),或者是绝对路径(以 / 或 C: 之类的盘符开头)。另外,模块名中的 .js 扩展名可以省略。以下是一个例子。 var foo1 = require('./foo'); var foo2 = require('./foo.js'); var foo3 = require('/home/user/foo'); var foo4 = require('/home/user/foo.js'); // foo1至foo4中保存的是同一个模块的导出对象。 另外,可以使用以下方式加载和使用一个JSON文件。 var data = require('./data.json'); exports exports 对象是当前模块的导出对象,用于导出模块公有方法和属性。别的模块通过 require

nodejs笔记-2017.4.13

本秂侑毒 提交于 2020-03-30 03:22:08
原文链接: http://nqdeng.github.io/7-days-nodejs/#1 模块 编写稍大一点的程序时一般都会将代码模块化。在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。 在编写每个模块时,都有 require 、 exports 、 module 三个预先定义好的变量可供使用。 require 函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。模块名可使用相对路径(以 ./ 开头),或者是绝对路径(以 / 或 C: 之类的盘符开头)。另外,模块名中的 .js 扩展名可以省略。以下是一个例子。 var foo1 = require('./foo'); var foo2 = require('./foo.js'); var foo3 = require('/home/user/foo'); var foo4 = require('/home/user/foo.js'); // foo1至foo4中保存的是同一个模块的导出对象。 另外,可以使用以下方式加载和使用一个JSON文件。 var data = require('./data.json'); exports 对象是当前模块的导出对象,用于导出模块公有方法和属性。别的模块通过 require 函数使用当前模块时得到的就是当前模块的

浏览器User-Agent大全

不羁的心 提交于 2020-03-29 07:59:46
what's the User-Agent   UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。UA可以进行伪装。   浏览器的UA字串的标准格式:浏览器标识(操作系统标识;加密等级标识;浏览器语言)渲染引擎标识版本信息。但各个浏览器有所不同。 字串说明: 1、浏览器标识   出于兼容及推广等目的,很多浏览器的标识相同,因此浏览器标识并不能说明浏览器的真实版本,真实版本信息在UA字串尾部可以找到。 2、操作系统标识 FreeBSD X11;FreeBSD(version no.)i386 X11;FreeBSD(version no.)AMD64 Linux X11;Linux ppc X11;Linux ppc64 X11;Linux i686 X11;Linux x86_64 Mac Macintosh;PPC Mac OS X Macintosh;Intel Mac OS X Solaris X11;SunOS i86pc X11

Maven统一修改版本号

╄→尐↘猪︶ㄣ 提交于 2020-03-28 13:04:22
例如:我们现在导入的Spring依赖都是4.0.0盘本的,但是我们现在需要4.1.1版本的,手动逐一修改不可靠    建议配置方式:       使用properties的标签内使用自定义标签统一声明版本号                 在需要统一版本的位置,加入${自定义标签名}引用声明的版本号              其实properties标签配合自定义标签不仅可以修改版本号还可以修改很多    来源: https://www.cnblogs.com/yz-bky/p/12586733.html

Zookeeper入门实战

痴心易碎 提交于 2020-03-27 10:55:08
Zookeeper是一个为分布式应用提供一致性协调服务的中间件,主要用来解决分布式应用中经常遇到的一些一致性问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文主要包括Zookeeper简介、安装、命令行操作、java操作Zookeeper等,文中所使用到的软件版本:Java 1.8.0_191、Zookeeper 3.6.0、junit 4.13、Centos 7.6。 1、简介 1.1、设计目标 ZooKeeper is simple. ZooKeeper is replicated. ZooKeeper is ordered. ZooKeeper is fast. ZooKeeper是简单、可复制、有序、快速的。 1.2、数据模型和层次命名空间 ZooKeeper提供的命名空间与标准文件系统的命名空间非常类似。命名空间由一系列路径组成,用/分隔。ZooKeeper命名空间中的每个节点使用一个具体路径来标识。ZooKeeper的层次命名空间结构如下: 1.3、节点 与标准文件系统不同的是,ZooKeeper命名空间的每个节点可以保存数据,就像一个文件系统中的文件,它既是文件也是目录。ZooKeeper用来存储状态信息、配置、位置信息等,因此存储在每个节点上的数据通常很小,在字节到千字节范围内。有四种类型的节点: 临时节点(EPHEMERAL)

git与github的使用

对着背影说爱祢 提交于 2020-03-26 03:21:39
版本控制系统 为什么要有版本控制系统 通过注册与登录的需求引入版本控制系统 在开发过程中,经常需要对一个文件进行修改甚至删除,但是我们又希望能够保存这个文件的历史记录,如果通过备份,那么管理起来会非常的复杂。 在多人开发时,如果需要多人合作开发一个页面,那么修改以及合并也会非常的棘手。容易出现冲突。 什么是版本控制系统 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。 【使用webstorm演示版本控制系统】 版本控制系统的分类 参考文章: 关于版本控制的介绍 本地版本控制系统 本地版本控制系统就是在一台机器上,记录版本的不同变化,保证内容不会丢失 如果多人开发,每个人都在不同的系统和电脑上开发,没办法协同工作。 ​ 集中式版本控制系統 svn是集中式的版本控制系统,集中式版本控制系统都有一个单一的集中管理的服务器(中央服务器),保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 需要一个中央服务器来管理代码的的版本和备份 所有的用户电脑都是从中央服务器获取代码或者是将本地的代码提交到中央服务器 依赖与网络环境,如果连不上中央服务器,就无法提交和获取代码。

面试必备之乐观锁与悲观锁

醉酒当歌 提交于 2020-03-25 19:09:34
何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。 乐观锁 总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。 两种锁的使用场景 从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候