自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 一条数据是如何落地到对应的shard上的?

前言一条数据是如何落地到对应的shard上的?当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个算法决定的:shard_num = hash(_routing) % num_primary_shards其中 _routing 是一个可变值,默认是文档的 _id 的值 ,也可以设置成一个自定义的值。 _routing 通过 ha

2021-02-25 16:38:51 187 1

原创 Git

git checkout -b dev切换https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

2021-01-16 22:51:03 72

原创 2021-DB-JDBCStatement

创建StatementStatement用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象只能执行不带参数的简单SQL语句。通过调用 Connection 对象的 createStatement 方法创建该对象,该对象用于执行静态的 SQL 语句,并且返回执行结果。Java代码:Statement statement = connection.createStatement();1执行SQL语句Statement 接口中定义了下列方法用于执行 SQL 语

2021-01-13 09:14:01 967

原创 HashMap

为啥默认长度是16?减少碰撞,为了就是少去遍历链表这样一来就产生了相同的索引值,也就是说两个hash值为8和9的key会定位到数组中的同一个位置上形成链表,这就产生了碰撞。而查询的时候需要遍历这个链表,这样就降低了查询的效率。同时,我们也可以发现,当数组长度为15的时候,hash值会与length-1(1110)进行按位与,那么最后一位永远是0,而0001,0011,0101,1001,1011,0111,1101这几个位置永远都不能存放元素了,会造成严重的空间浪费,更糟的是这种情况下,数组可以使用的

2020-12-15 17:10:53 67

原创 BeanFactory和FactoryBean

Spring的BeanFactory是IOC容器的顶级接口,但是FactoryBean这个接口是为了实现另外的功能:帮忙定制化生成bean对象、返回、并且交给spring IOC管理FactoryBean有三个方法getObject、getType、isSingleton如果有类AFactory实现这个接口,并且分别实现这三个接口,作用:getObject里面可以写业务逻辑,比如传入字符串,解析有,在用new的方式生成对象。getType返回类.class即可。isSingleton一般返回t

2020-12-13 21:59:24 54

原创 Spring IOC容器启动方式

spring 的bean通过xml配置好了以后,要启动ioc容器,其实就是拿到ApplicationContext示例。可以在UT中通过如下:ApplicationContext applicationContext = new ClassPathXmlApplictionContext(“classpath:applicationContext.xml”)即可,当然这里的xml名字啥都行,规范都用这个。另外,还可以通过:ApplicationContext applicationContext =

2020-12-10 23:05:26 118

原创 hibernate session、连接池、事务

一个hibernate session就代表一次操作单元打比方如下(理解不对的请多指正)。北京有一个仓库(DB),上海要访问仓库连接池:管理了多条北京—上海的高速公路session:比如上海往仓库发一车面粉,又发了一车大米(另一个session)伪代码:public void service(){saveA()saveB()}以上方法俩session。**事务:**如果service方法上加了@Transaction,那么这两个session会被统一管理,成同成、败同败。...

2020-12-05 22:52:39 130

原创 日志级别

今天新来实习生问日志级别,给我看搜到的文章,比如:1.等级由低到高:debug<info<warn<Error<Fatal;不是说级别高到低就是级别大到小。。全是sb答案。说看完了还是不会用这么简单的问题非得整这么高大上。。咱是野路子,直接说log4j在用的时候1,代码中获取logger实力以后codingprivate static final Logger LOG = LoggerFactory.getLogger(A.class);后LOG.DEBUG LO

2020-09-30 09:37:15 106

原创 加密解密--三文懂

一句话,泪目:明白了RSA,还顺带理解了人类为什么不断追求更大的质数,竟然有些感动!!

2020-09-23 00:10:50 94

原创 公钥私钥---一文懂1

https://blog.csdn.net/baidu_36327010/article/details/78659665这篇文章已经说的很详细了,但是通篇基于这句话:公钥加密的密文,只能私钥才能解开。。如果不了解非对称加密的同学来说,只能带着疑惑,揣着糊涂明白了全文。。现在把这个疑惑解开(为什么被公钥加密的可以被私钥解密?):https://blog.csdn.net/doujinlong1/article/details/82051986这个博文里面需要补充一个数学概念,在最下面,同余的概念

2020-09-23 00:03:07 227

原创 socket--tcpip

https://www.cnblogs.com/aademeng/articles/11059688.html

2020-09-08 11:32:53 65

原创 Http 和 https

HTTP+加密+认证+完整性保护=HTTPS首先我们弄要弄清楚一件事,HTTPS并非应用层的一种新协议。只是HTTP通信接口部分用SSL或者TLS协议代替而已。原先HTTP协议直接和TCP协议对接,而HTTPS则是HTTP先与SSL/TLS通信,再由SSL/TLS和TCP通信。加密前面我们说到HTTP是采用明文传输的,这就免不了你的信息会被他人窥探。即使是采用对称加密算法,无法保证你在发送密钥的过程中不被他人窃取到。换句话说我们保证了密钥的安全传输,那么整个通信过程就不怕被窥探到了。HTTPS采用了非

2020-09-08 11:20:11 306

原创 http-tcp-socket

socket是在底层封装了tcp/ip协议的java类http也是基于tcp/ip协议的传输协议如果尝试在socket中打开一个端口并等待,获取socket后输出这个socket对象通过字符流获取的请求,然后再在浏览器中输入127.0.0.1:portNum 会发现在控制台中输出了当前浏览器的配置信息,客户端ip地址等简单的说,socket和http都是封装了ip/tcp协议,在使用时不需要去在意那些从物理层到网络层等的实现(TTL包头等),只需要进行业务数据的处理即可那么http协议的三个特点,可

2020-09-08 11:04:45 58

原创 2020-09-08

TCP第三次握手失败后怎么办?答:当客户端收到服务端的SYN+ACK应答后,其状态变为ESTABLISHED,并会发送ACK包给服务端,准备发送数据了。如果此时ACK在网络中丢失,过了超时计时器后,那么Server端会重新发送SYN+ACK包,重传次数根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认是5次。如果重传指定次数到了后,仍然未收到ACK应答,那么一段时间后,Server自动关闭这个连接。但是Client认为这个连接已经建立,如果Client端向Serve

2020-09-08 10:30:31 75

原创 ES module --导入2

import 里面必须写全巴包括.js后缀而且路径必须以点或者/开头,不然会认为是第三方路径也可以用http…js CDN上的文件路径如果只是执行要导入的文件,不要导入变量用,就是加载,不用到import {} from 。。。。import '…js’也可以3, import * as mod from …console.log(mod.)4,如果路径是动态的或者某些条件成立才import那么:会用到动态导入函数import {’./module.js’}.then({functi

2020-09-05 14:11:21 102

原创 ES module--导出1

一个js文件中var name = “tom”var age = 16export {name, age}//okexport {name as userName, age} //ok,但是import的时候需要 接收userNameexport {name as default, age}//ok 但是接收的时候一定是import default as name from因为default是保留关键字export default name //ok,导入的时候,可以随便写名字impo

2020-09-05 14:02:37 86

原创 XSS和CSRF 攻击 --- 通俗易懂的解释

XSS本质是Html注入,和SQL注入差不多。1,页面输入框,你写一段sql语句或者url访问,插入进去,让浏览器帮忙带着cookie去跑到自己的建的server上去。。2,页面输入的脚本X,点save后入库了,比如管理员在页面上load出user输入的数据的时候,脚本X执行了,把管理员的信息通过这段脚本 送给了 攻击人CSRFhttps://blog.tonyseek.com/post/introduce-to-xss-and-csrf/XSS:城门已破,黑客携带各种武器在城内为所欲为CSR

2020-09-05 11:27:40 214

原创 yeoman--使用5--外加git使用

发布这么一个generator或者发布这么一个cli一,先把源码(其实就哪个index和一些模板等等generator的文件),找个地方托管了1,echo node_modules > .gitignore2,git init初始话一个本地仓库3,git status发现工程下文件都没有被跟踪4,git add 目录下所有文件都被添加进来5,git commit -m “feat: initial commit”//需要一个远端仓库,把提交记录提交到远端6,去github上创建一个仓库

2020-08-09 22:05:45 135

原创 yeoman---使用4

cli–命令交互–接收用户输入//yeoman在询问用户环节会自动调用此方法prompting(){在此方法内部可以调用父类的prompt()方法发出对用户的命令行询问return this.prompt([{type: ‘input’,name:‘name’,message:‘Your project name’,default: this.appname //appname是项目生成目录名称}]).then(answers => {//answers == {name:‘u

2020-08-09 21:48:41 96

原创 yeoman--使用3

使用模板创建文件app下泄一个templates目录这里面放一个模板文件,这是文件完全遵守EJS模板引擎语法,也就是说<%=title%>的方式引入变量,也可以使用<%if(success){%>哈哈哈<%}%>index.js中原来用的write方法就可以不用了,用什么呢用copyTpl放法,这个方法三个参数:模板文件路径、输出路径、模板数据上下文1,const tmpl = this.templatePath(‘foo.txt’)//直接用这个方法获

2020-08-09 17:13:13 84

原创 yeoman-使用2

找到对应的generators这一步,可以在如下yeoman官网:yeoman.io/generators/比如想做一个网页项目,可以看到官网第一个就是一个webapp我们可以在my-web-app这个文件夹下运行 yo webapp这个时候会提问,是否使用bootstrap。。。巴拉巴拉一堆,选好以后往下,会安装c++的模块,这些模块,会下载二进制文件,所以要使用配置对应的镜像来加速。。Generator基本结构自定义一个generator是因为,已有的很多,但是都是特有的,这里自定义要遵守

2020-08-09 17:01:33 58

原创 yeoman

使用脚手架Yeoman(比较灵活,可以搭建多种类型项目,需要配合genertor来使用),虽然,现在react,vue等都有各自的脚手架工具,但是Yeoman依然有自己的市场,依然是我们学习和借鉴的第一脚手架。1,全局范围安装yonpm install yo --global2,安装对应的generator(搭建那种类型的项目,就安装对应的generator)npm install generator-node --global3,通过yo运行generatormkdir my-project

2020-08-09 16:31:16 99

原创 利用小工具进行性能优化

chrome里面,shift+ESC,打开浏览器任务管理器,然后,右击,把js的内存加入进来第一个Memory foot…指的是dom占用内存,如果不断增加,就是不断有dom在创建js的内存,括号里面的是指活动对象(可达对象)占用的内存只能看到有没有问题,哪里有问题呢?这个不太好用!!...

2020-08-01 07:47:35 104

原创 前端技术-TypeScript-语言的类型(01)

两个维度区分语言强类型和弱类型(类型安全维度)这个没有明确的定义,但是:强类型不允许随意的隐式类型转换,而弱类型是允许的。静态类型和动态类型(类型检查维度)静态类型:一个变量声明时,它的类型就是明确的,而且声明过后它的类型就不允许再修改动态类型:运行阶段才能够明确变量类型,而且变量的类型可以随时发生变化。动态类型语言,变量是没有类型的,变量中存放的值是有类型的js是标准的弱类型、动态类型语言!groovy、ruby、phython是强类型、动态语言java、C#是强类型、静态语言php

2020-07-27 09:51:11 164

原创 前端技术-代码执行顺序和this指向专栏

专题–执行顺序和this指向//执行顺序-宏任务和微任务setTimeout(()=>{console.log(“A”)},0)setTimeout(()=>{console.log(“B”)},1000)Promise.resolve().then(() => {setTimeout(() => {console.log(“c”)}, 0)setTimeout(() => {console.log(“d”)}, 1000);console.log(“e”

2020-07-26 23:03:51 323

原创 前端技术-ES6(10)

promise-async awaitfunction ajax(url){return new Promise(function(resolve, reject){var xhr = new XMLHttpRequest();xhr.open(‘GET’,url)xhr.responseType = ‘json’xhr.onload = function(){if(this.status === 200){resolve(this.response)}else{reject(new E

2020-07-26 22:36:55 64

原创 前端技术-ES6(09)

生成器Generator//生成器Generator – 主要是用来异步回调嵌套过深的问题function * genFun(){console.log(112);yield 100console.log(22)yield 200}const genFuu = genFun()console.log(genFuu.next());console.log(genFuu.next());console.log(genFuu.next());//生成器配合迭代器,实现遍历对象://使用

2020-07-23 16:21:02 50

原创 前端技术-ES6(08)

Symbol和迭代器//如果一旦Symbol作为对象属性,for(var i in obj)、object.keys、JSON.stringify都是拿不到这个key的,所以私有属性//Object.getOwnPropertySymbols 可以拿到//for适合便利数组,forin适合便利键值对,还有就是一些对象的遍历方法如foreach。。,这些都有一定的局限性//新引入的for of方式,以后的趋势const arr2 = [1,2,3,4]for(const item of newAr

2020-07-23 16:18:11 48

原创 前端技术-ES6(07)

ES6 set map symbol//ES6 — set 新的数据结构,类似集合const s = new Set();s.add(1).add(2).add(3).add(1).add(4)console.log(s)s.forEach(item=> console.log(item))console.log(s.has(3))console.log(s.delete(4))console.log(“s”, s)s.clear()console.log(“s”, s)//最

2020-07-23 16:16:07 55

原创 前端技术-ES6(06)

Proxy//ES6 使用proxy代理,比Object.defineProperty()更好,这里描述其中三个属性,其他不再赘述。const person = {name : ‘tom’, age : 18, gender:‘man’}const personProxy = new Proxy(person, {get(target, property){console.log(target, property);return 100;},set(target, property, val

2020-07-23 16:13:50 53

原创 前端技术-ES6(05)

//ES6中对象字面量的增强,可以用如下方式定义对象属性const arg = “abc”;const xx = “rrr”;const obj = {name : “tom”,//arg : arg,arg,//fuc : function(){console.log(11)}fuc(){console.log(11)},//abc:‘ttt’[xx]:‘ttt’}console.log(obj)obj.fuc();//Object.assign方法的使用–覆盖目标对象,返回覆

2020-07-23 16:11:50 47

原创 前端技术-ES6(04)

箭头函数const persion = {name : “tom”,sayHi: () => {console.log(“sayHi”, this.name);},sayHiAsync1 : function(){setTimeout(function(){console.log(this.name);}, 1000)},sayHiAsync2 : function(){setTimeout(()=>{console.log(this.name);}, 1000)}

2020-07-23 16:10:25 49

原创 前端技术-ES6(03)

模板字符串字符串以前习惯是使用单引号、双引号定义。但是模板字符串是使用反引号(键盘上1左边的按键)定义:var a = “aa /n bb”;const b = aa bb插值表达式:const name = ‘tom’const msg = hey ${name} , ${1+2}函数参数默认值function foo(enable = true){console.log(enable)}foo(false)只有调用的时候不传参数的情况才会使用默认值。多个参数的时候,默认值参数

2020-07-22 16:08:36 52

原创 前端技术-ES6(02)

数组解构const arr = [100,200,300];const [foo, …rest] = arr;console.log(rest);输出:[200,300]const path = ‘/foo/bar/baz’;const [, rootdir] = path.split(’/’);console.log(rootdir)输出:foo

2020-07-22 15:36:57 53

原创 前端技术-ES6(01)

let与varvar element = [{},{},{}];for(var i = 0 ; i < 3 ; i++){element[i].onclick = function(){console.log(i)}}element[1].onclick();这时候回发现输出结果永远都是3for循环里面定义循环变量的时候改成let,这时候i就成为了块级作用域了constconst a = ‘a’a = ‘b’ //会报错的const a= {}a.name = ‘a’//这

2020-07-22 10:04:30 58

空空如也

空空如也

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

TA关注的人

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