开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

JVM调优-堆大小设置、回收器选择

堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m:设置JVM最大可用内存为3550M。 -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX...
小鱼儿321 发布于 1天前 阅读 181 评论 2 点赞 2

如何精确地测量java对象的大小

关于java对象的大小测量,网上有很多例子,大多数是申请一个对象后开始做GC,后对比前后的大小,不过这样,虽然说这样测量对象的大小是可行的,不过未必是完全准确的,因为过程中包含对象本身的开销,也许你运气好,正好能碰上,差不多,不过这种测试往往显得十分的笨重,因为要写一堆代码才能测试一点点东西,而且只能在本地测试玩玩,要真正测试实际的系统的对象大小这样可就不行了,本文说说java一些比较偏底层的知识,如何测量对象大小,java其实也是有提供方法的。注意:本文的内容仅仅针对于Hotspot VM,如果你以前不知道jvm的对象大小怎么测量,而又很想知道,跟我一步一步做一遍你就明白了。 首先,我们先写一段大家可能不怎么写或者认为不可能的代码:一个类中,几个类型都是private类型,没有public方法,如何对这些属性进行读写操作,看似不可能哦,为什么,这违背了面向对象的封装,其实在必要的时候,留一道后门可以使得语言的生产力更加强大,对象的序列化不会因为没有public方法就无法保存成功吧,OK,我们简单写段代码开个头,逐步引入到怎么样去测试对象的大小,一下代码非常简单,相信不用我解释什么: import java.lang.reflect.Field; class NodeTe...
小鱼儿321 发布于 1天前 阅读 125 点赞 1

Linux TCP连接建立过程超时的参数调整

简述Linux TCP连接过程中的超时参数
摘下-满天星 发布于 1天前 阅读 100

6月25日至27日,为何全球开源大咖齐聚国家会议中心?LC3来啦!

广告
今年6月25日至27日, LinuxCon + ContainerCon + CloudOpen(LC3)将在北京国家会议中心召开。本次会议针对开源技术在人工智能和深度学习、区块链、云原生、虚拟服务器架构和微服务、新兴技术、基础实施和自动化、IoT和M2M、KVM、Linux系统、网络编排等10大前沿领域的应用,邀请了全球数百位业界大咖,用三天时间、超过200场分享,从市场、技术、产业甚至整个生态层面,将做全方位的探讨。
LinuxCon + ContainerCon + CloudOpen(LC3)

Centos 7+CDH5.7.2全部署流程

Centos 7+CDH5.7.2全部署流程 一、前期准备 1、虚拟机配置     这个配置是我在网上看到的,我就借用了这个配置:     主节点:8g内存、硬盘80g     从节点:2g内存、硬盘80g     安装系统的时候,我建议将IP和主机名都给配置好,这样就省的在系统中进行配置了,当然下面也有在系统中配置的方法。     所以如果你要使用虚拟机来完成这个配置的话,那么,你的主机的配置内存就不能低于16G了。而且还要找一个盘符较大的磁盘空间,不然到后面操作CDH的时候会很尴尬,我第一次就被卡在了硬盘空间不足上,然后又重新找了一个较大的盘符进行了重新安装,包括虚拟机系统。 2、软件版本     1.JDK版本:jdk-8u131-linux-x64.tar.gz     2.Scala版本:scala-2.11.0.tgz     以上两个包建议使用rpm或者yum安装,这样可以省点事,不过我是使用的这两个包。     3.jdbc连接包:mysql-connector-java-5.1.38-bin.jar     4.MySQL相关包:     MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm     MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm     5.CDH安装相关的包:     cloudera manager包:cloudera-manager-centos7-cm...
星汉 发布于 1天前 阅读 335 点赞 1

中国人自己的框架——蚂蚁金服RPC框架结构分析

SOFA开源项目让不在蚂蚁金服工作的程序员也能获得阿里的项目经验
码洞 发布于 2天前 阅读 761 评论 6

深入分析Kubernetes Scheduler的NominatedPods

本文对NominatedPods和NominatedNode的作用进行了阐述,并从源码角度分析了抢占调度时及抢占调度后,NominatedPods都有哪些变更操作,最后分析了PriorityQueue中Pod的Add/Update/Delete操作对PriorityQueue NominatedPods Cache的影响,希望有助于读者加深对scheduler抢占调度和优先级队列的理解。
WaltonWang 发布于 2天前 阅读 110

基于前序遍历的无递归的树形结构的数据库表设计

本文介绍的方法基于多叉树的前序遍历序列,是所有数据库树结构存储方案中查询子树速度最快的方案。最早发表在这里"http://drinkjava2.iteye.com/blog/2353983",但那篇文章太啰嗦了,这是整理后的精简版,其实原理很简单,几句话就能说完。 目前常见的树形结构数据库存储方案有以下四种,但是都存在一定问题: 1)Adjacency List(邻接表):每个节点仅记录父节点主键。优点是简单,缺点是访问子树需要递归遍历,对数据库压力大(即使是支持递归SQL的数据库)。 2)Path Enumerations( 路径枚举):用一个字符串记录当前节点所在路径。优点是查询方便,缺点是占用空间大,查询需要使用like模糊方法,效率低,插入新记录时要手工更改此节点以下所有路径,维护不便。 3)Closure Table(闭包表):专门一张表维护Path,缺点是占用空间大,操作不直观。 4)Nested Sets (嵌套集):记录左值和右值,优点是查询子树无需递归,缺点是非常复杂、难操作。 本文介绍的基于树形结构的前序遍历序列方法,示意图如下:   如上图左边的树结构,映射在数据库里的结构见右图表格,注意整个表格是一个排好序的树结构的前序遍历序列,相同节点深度的排序以line为准。 表格的最后一行(或每个根节点)必...
yong9981 发布于 2天前 阅读 145 评论 3

Spring Cloud Zuul中使用Swagger汇总API接口文档

> 有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中?之前给大家的回复都只是简单的说了个思路,昨天正好又有人问起,索性就举个例子写成博文供大家参考吧。 如果您还不了解`Spring Cloud Zuul`和`Swagger`,建议优先阅读下面两篇,有一个初步的了解: - [Spring Cloud构建微服务架构:服务网关(基础)](http://blog.didispace.com/spring-cloud-starter-dalston-6-1/) - [Spring Boot中使用Swagger2构建强大的RESTful API文档](http://blog.didispace.com/springbootswagger2/) > 本文首发于:http://blog.didispace.com/Spring-Cloud-Zuul-use-Swagger-API-doc/ > > **如果您有本文的需求,也可以看看我的这个开源项目,可以直接使用:https://gitee.com/didispace/swagger-butler** ### 准备工作 上面说了问题的场景是在微服务化之后,所以我们需要先构建两个简单的基于Spring Cloud的微服务,命名为`swagger-service-a`和`swagger-service-b`。 下面只详细描述一个服务的构建内容,另外一个只是名称不同,如有疑问可以在文末查...
程序猿DD 发布于 3天前 阅读 569 评论 2

你了解的工厂模式可能有误

工厂模式,与简单工厂模式
温安适 发布于 3天前 阅读 559 评论 5 点赞 3

使用Safe.js绑定联动快速开发用户信息页面

这篇文章将会讲解如何使用safe.js快速开发一个web应用程序。 前言 在这篇文章里面,我将简单制作一个用户信息输入的页面 【本文不会讲解safe.js每句代码的具体作用,如果想了解请点击此链接:https://gitee.com/skyogo/Safe/wikis/Safe.js】 开始 首先我们先建立一个Demo.html的文件,里面写上基本结构,并用script标签引入safe.js的文件:(Safe.js Gitee链接:https://gitee.com/skyogo/Safe)【safejs版本必须大于3.1.0】 <!DOCTYPE html> <html> <head> <title>Safe.js Demo</title> <meta charset="UTF-8"> </head> <body> <script src="js/Safe.js"></script> <script> window.onload = function(){ } </script> </body> </html>  然后我们在body标签里面写上以下代码: <input id="nameInput" placeholder="请输入名字:" type="text"> <span id="name">你的名字:<span class="val"></span></span> <br> <br> <hr> <input id="ageInput" placeholder="请输入年龄:" type="text"> <span id="age">你...
Skyogo 发布于 3天前 阅读 235 评论 3

分布式架构的演进过程

一.分布式架构的发展历史      1946年,世界上第一台电子计算机在美国的宾夕法尼亚大学诞生,它的名字是:ENICAC ,这台计算机的体重比较大,计算速度也不快,但是而代表了计算机时代的到来,再以后的互联网的发展中也有基础性的意义。      计算机的组成是有五部分完成的,分别是:输入设备,输出设备,存储器,存储器里面由运算器和控制器,有一个冯诺依曼的模型非常形象的对象计算机的组成进行了描述,不过计算机也是有数据流,指令流,控制流来进行计算的和正常运转的。如图:                ENIAC之后,电子计算机进入到了IBM主导的大型机的时代,   在1946年第一台IBM大型机SYSTEM/360诞生,这使得IBM在20世纪50~60年代统治了整个大型计算机的工业,在大型主机时代,计算机架构向两个方向发展CISC(微处理器执行的计算机语言指令集)CPU为架构的价格便宜的个人PC和RISC(精简指令集计算机)价格高的小型UNIX服务器。      大型主机的出现,凭借着计算能力和处理能力,高的稳定性和安全性,在很长的一段时间内引领到计算领域的发展。但是集中式的计算机系统来带来了一些问题,来越来越不能满足用户的需求比如说:       1.大型的主机非常贵,一般的小企业用不起。       ...
代码屠夫18 发布于 3天前 阅读 452 评论 1 点赞 1

使用 Git-Analyze 玩转 Git

git-analyze 是一个基于 libgit2 的 git 工具集,包括 git-analyze,git-complete, git-rollback,以及 git-cheat 等
Force武装卫队 发布于 3天前 阅读 715 评论 5 点赞 2

jenkins编译之Optional小坑

背景 最近在部门内部一直推广Guava https://my.oschina.net/qixiaobo025/blog?search=guava 其中对于可空对象建议各位使用Optional封装。 问题 最近发现了奇怪的问题 [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /data/jenkins/workspace/f6-local-test-erp/biz-service-impl/src/main/java/com/air/tqb/service/base/impl/ServiceCategoryServiceImpl.java:[83,8] 错误: 对Optional的引用不明确 [ERROR] java.util 中的类 java.util.Optional 和 com.google.common.base 中的类 com.google.common.base.Optional 都匹配 /data/jenkins/workspace/f6-local-test-erp/biz-service-impl/src/main/java/com/air/tqb/service/base/impl/ServiceCategoryServiceImpl.java:[114,8] 错误: 对Optional的引用不明确 [ERROR] java.util 中的类 java.util.Optional 和 com.google.common.base 中的类 com.google.common.base.Optional 都匹配 /data/jenkins/workspace/f6-local-test-erp/biz-service-impl/src/main/java/com/air/tqb/service/base/impl/ServiceCategoryServiceImpl.java:[122,8] 错误: 对Optiona...
Mr_Qi 发布于 4天前 阅读 434 点赞 1

chrome又出幺蛾子了之Cannot read property 'onMessage' of undefined?

背景 Chrome获取Mac地址实现 问题 这个问题其实还蛮影响开发和测试的 小伙伴加的代码如下 var isChrome = window.navigator.userAgent.indexOf("Chrome") !== -1;//判断是否是chrome浏览器 //获取插件mac地址 if(isChrome){ var editorExtensionId = "fndijacmgfpgicgknoceclheehanolhc"; function sendMessage(type){ chrome.runtime.sendMessage(editorExtensionId, {requestType: type}, function(response) { }); } sendMessage(); } 其实很明显这段代码容易出问题! 首先chrome.runtime从chrome23版本才有 那么不兼容老版本的chrome。 chrome.runtime Description: Use the chrome.runtime API to retrieve the background page, return details about the manifest, and listen for and respond to events in the app or extension lifecycle. You can also use this API to convert the relative path of URLs to fully-qualified URLs.  Availability: Since Chrome 23.  Content Scripts: connect , getManifest , getURL , id , onConnect , onMessage and sendMessage ...
Mr_Qi 发布于 4天前 阅读 344

教程:一起学习Hystrix--Hystrix常用场景--失败

一起学习一下高并发架构中神器Hystrix,使用hystrix之前,建议先了解一下Rxjava,本文通过官方文档,对Hystrix进行初步了解,如有不当之处,望大神指正补充 ,后续通过项目示例对Hystrix再进一步深入学习
java_龙 发布于 4天前 阅读 313

Guava之神奇的Ordering

背景 这年头想必没几个人没写过排序吧。。。而在jdk也默认提供了许多和排序相关的封装。 我们最常使用的想必就是 /** * Sorts the specified list into ascending order, according to the * {@linkplain Comparable natural ordering} of its elements. * All elements in the list must implement the {@link Comparable} * interface. Furthermore, all elements in the list must be * <i>mutually comparable</i> (that is, {@code e1.compareTo(e2)} * must not throw a {@code ClassCastException} for any elements * {@code e1} and {@code e2} in the list). * * <p>This sort is guaranteed to be <i>stable</i>: equal elements will * not be reordered as a result of the sort. * * <p>The specified list must be modifiable, but need not be resizable. * * <p>Implementation note: This implementation is a stable, adaptive, * iterative mergesort that requires far fewer than n lg(n) comparisons * when the input array is partially sorted, while offering the * performance of a traditional mergesort when the inpu...
Mr_Qi 发布于 4天前 阅读 583 评论 1

渐进式Web应用(PWA)入门教程(下)

上篇文章我们对渐进式Web应用(PWA)做了一些基本的介绍。 渐进式Web应用(PWA)入门教程(上) 在这一节中,我们将介绍PWA的原理是什么,它是如何开始工作的。 第一步:使用HTTPS 渐进式Web应用程序需要使用HTTPS连接。虽然使用HTTPS会让您服务器的开销变多,但使用HTTPS可以让您的网站变得更安全,HTTPS网站在Google上的排名也会更靠前。 由于Chrome浏览器会默认将localhost以及127.x.x.x地址视为测试地址,所以在本示例中您并不需要开启HTTPS。另外,出于调试目的,您可以在启动Chrome浏览器的时候使用以下参数来关闭其对网站HTTPS的检查: ·         --user-data-dir ·         --unsafety-treat-insecure-origin-as-secure 第二步:创建一个应用程序清单(Manifest) 应用程序清单提供了和当前渐进式Web应用的相关信息,如: ·         应用程序名 ·         描述 ·         所有图片(包括主屏幕图标,启动屏幕页面和用的图片或者网页上用的图片) 本质上讲,程序清单是页面上用到的图标和主题等资源的元数据。 程序清单是一个位于您应用根目录的JSON文件。该JSON文件返回时必须添加Content-Type: application/manifes...
葡萄城控件技术团队 发布于 4天前 阅读 362

自定义跨平台比特币实时行情看板

![](https://static.oschina.net/uploads/img/201805/24192235_l9n0.png) ### 一、前言 前段时间跟朋友炒币,总是需要打开交易平台才能看行情,有点麻烦,而且那个窗口也特别大,内容也很杂。所以需要一个简洁的看板。下面是需求。 #### 需求: - 首先是可以看各种币行情的看板 - 关注的币种都不同,所以需要支持自定义交易币种 - 由于大家使用的系统不同,要支持跨平台。 ### 二、方案和工具 #### 方案 简单来讲就是electron套个aicoin插件 分三步: - 用vue来做个设置页面 - 用vue做个看板页面,把aicoin套到vue里 - 用vue-router组合起来放到electron里 #### 主要工具 - electron - vue - element-ui - aicoin ### 三、项目结构 ![输入图片说明](https://static.oschina.net/uploads/img/201805/23170033_Whbk.jpg) #### 主要文件说明 - MainPage用来配置要显示的货币类型 - ShowPage是看板页面 - aicoin是下载到本地的aicoin脚本,因为要翻墙所以先下好 - showcoin是具体显示数据的脚本。 #### electron和vue安装 这个教程比较多,参考[链接](https://github.com/SimulatedGREG/electron-vue),install的时候,建议使用cnpm快一些尤其是electron如果用npm特别慢。 #### 不...
sharpcx 发布于 4天前 阅读 1028 评论 14 点赞 1 打赏 1

创建maven原型(artchetype)

maven自定义原型
666B 发布于 4天前 阅读 274

码云即将支持 Git v2 Protocol

Git v2 Protocol aka Git Wire Protocol
Force武装卫队 发布于 4天前 阅读 1236 评论 10 点赞 4

python 笔记 之 multiprocess组件Lock

''' multiprocess组件Lock ''' import multiprocessing import time def add1(lock,value,number): with lock: # 加锁 print("start add1 number={0}".format(number)) for i in range(1,5): number += value time.sleep(0.3) print("number add1 = {0}".format(number)) def add3(lock,value,number): lock.acquire() #加锁 print("start add3 number={0}".format(number)) try: for i in range(1,5): number += value time.sleep(0.3) print("number add3 = {0}".format(number)) except Exception as e : raise e finally: lock.release() #解锁 if __name__ == '__main__': print("start main") number = 0 lock = multiprocessing.Lock() p1 = multiprocessing.Process(target=add1 ,args=(lock,1,number)) p3 = multiprocessing.Process(target=add3 ,args=(lock,3,number)) p1.start() p3.start() print("end main")...
寻爱的小草 发布于 4天前 阅读 7

工欲善其事必先利其器。100万项目资金助你成为自由职业者

广告
优质开发商申请规则细则落地了,赶紧来看看自己符合不符合。
众包

jenkins + pipeline构建自动化部署

本文转载自:http://www.itdaan.com/blog/2018/04/27/c74fb3ba348dec020f6ce791190a6c90.html 一、引言          Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程,形成流水式发布,构建步骤视图化。简单来说,Pipeline适用的场景更广泛,能胜任更复杂的发布流程。举个例子,job构建工作在master节点,自动化测试脚本在slave节点,这时候jenkins1.0就无法同时运行两个节点,而Pipeline可以。   二、Pipeline的几个基本概念: Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。 Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是slave,是执行Step的具体运行期环境。 Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。     三、PIpeline语法 1.Pipeline支持两种语法:Declarative Pipeline(在Pipeline ...
远近高低各不同 发布于 3周前 阅读 36

多线程编程之两阶段终止模式

       对于多线程编程,如何优雅的终止子线程,始终是一个值得考究的问题。如果直接终止线程,可能会产生三个问题: - 子线程当前执行的任务可能必须要原子的执行,即其要么成功执行,要么就不执行; - 当前任务队列中还有未执行完的任务,直接终止线程可能导致这些任务被丢弃; - 当前线程占用了某些外部资源,比如打开了某个文件,或者使用了某个Socket对象,这些都是无法被垃圾回收的对象,必须由调用方进行清理。        由此可见,如何优雅的终止一个线程,并不是一个简单的问题。常见的终止线程的方式是,声明一个标志位,如果调用方要终止其创建的线程的执行,就将该标志位设置为需要终止状态,子线程每次执行任务之前会检查该标志位,如果为需要终止状态,就不继续执行任务,而是进行当前线程所占用资源的一些清理工作,如关闭Socket和备份当前未完成的任务,清理完成之后结束当前线程的调用。        两阶段终止模式使用的就是上述方式进行多线程的终止的,只不过其将线程的终止封装为一个特定的框架,使用者只需要关注特定的任务执行方式即可,从而实现了线程的终止与任务的执行的关注点的分离。两阶段终止模式的UML图如下: ![两阶段终止...
张旭峰 发布于 2小时前 阅读 3

Failed: error connecting to db server: server returned error on SASL authentication step: Authentica

一:问题描述 备份时,报错:   [root@ser6-51 ~]# mongodump  -d myTest -o /backup/mongodb/all_bak_20150619.bak -u=superuser -p=123456 2015-06-29T10:17:10.784+0800 Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed. 二:解决办法 添加--authenticationDatabase admin 如:   [root@ser6-51 mongodb]# mongodump  -d myTest -o /backup/mongodb/all_bak_20150619.bak -u superuser -p=123456 --authenticationDatabase admin 2015-06-29T10:24:21.427+0800 writing myTest.system.indexes to /backup/mongodb/all_bak_20150619.bak/myTest/system.indexes.bson 2015-06-29T10:24:21.428+0800 writing myTest.t to /backup/mongodb/all_bak_20150619.bak/myTest/t.bson 2015-06-29T10:24:21.428+0800 writing myTest.t2 to /backup/mongodb/all_bak_20150619.bak/myTest/t2.bson 2015-06-29T10:24:21.429+0800 writing myTest.t metadata to /backup/mongodb/all_bak_20150619.bak/myTest/t.metadata.json 2015-06-29T10:24:21.429+0800 wr...
Airship 发布于 2小时前 阅读 3

ArrayList和LinkedList的add(E)性能秘密

性能大揭秘
木子道_ 发布于 2个月前 阅读 401 评论 18

vcenter6.5安装

![](https://upload-images.jianshu.io/upload_images/3778244-47fd371258f9b715.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 概述 推荐使用ui去安装vcenter,不要去使用cli安装,因为这样比较直观一点 ### 安装vcenter 首先下载安装包,是一个iso包,解压到本地,进入`vcsa-ui-installer/lin64`,之后点击installer就可以安装了,为什么进入lin64这个目录呢,因为我不知道什么是windows系统 首先是一个介绍界面,直接点击下一步然后同意协议,接着是Select deployment type,就是选择部署模式,如果你是单机的,或者集群很小那么直接选择第一项Embedded Platform Services Controller,如果你想选择第二项,那么你就是大佬,别看我的垃圾文章了 接着是选择Appliance deployment target,就是要把vcenter部署在哪一台物理机上,输入ip地址,账号密码直接下一步 之后设置appliance VM,就是部署vcenter的这台虚拟机的root密码,密码要大写小写字母加数字加符号 之后设置Select deployment size,就是部署的虚拟机配置大小,我是选择tiny,毕竟内存不多哈哈 之后设置Select datastore,就是你部署的esxi上的存储 最好配置网络,我是选择dhcp的 接着点击完成...
bboysoulcn 发布于 1个月前 阅读 21

[编程题]数对

【题目】 牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。 牛牛希望你能帮他计算一共有多少个可能的数对。 输入描述: 输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。 输出描述: 对于每个测试用例, 输出一个正整数表示可能的数对数量。 示例1 输入 5 2 输出 7 说明 满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3) 【解决】 ① https://www.nowcoder.com/questionTerminal/bac5a2372e204b2ab04cc437db76dc4f x可以在 [1, n] 上取,但是y只能在 [k, n]上取,因为k以下都不存在大于等于k的余数。 所以遍历y,对于每一个y,统计符合的x的个数,加到count里。 先假设x可以从 [0, n]中取值,那么这段区间至少可以分成(n/k)个完整的、长度为y的区间。 x = 【0,1……y-2,y-1】【y,y+1,……,2y-2,2y-1】……【……】……【……,n】 在每个小区间a上,第i个数a[i]%y的余数是i。这样每一小段上大于等于k的x有y-k个(显然当k=0时,y个数都满足题意)。 【0,1,……,k,k+1,……,y-1】 这样,已经遍历的总数是(n/y)*y,而其中满足条件的x的总数是(...
叶枫啦啦 发布于 2个月前 阅读 82

Spring5 设计模式(一)

Spring框架中的设计模式(一) 设计模式有助于遵循良好的编程实践。作为最流行的Web框架之一的Spring框架也使用其中的一些。 本文将介绍Spring Framework中使用的设计模式。这是5篇专题文章的第一部分。这次我们将发现Spring框架中使用的4种设计模式:解释器,构建器,工厂方法和抽象工厂。每部分将首先解释给定模式的原理。紧接着,将会使用Spring的一个例子来加深理解。 解释器设计模式 在现实世界中,我们人类需要解释手势。他们可以对文化有不同的含义。这是我们的解释,给他们一个意义。在编程中,我们还需要分析一件事情,并决定它是什么意思。我们可以用解释设计模式来做。 此模式基于表达式和评估器部分。第一个代表一个要分析的事情。这个分析是由评价者来做出的,它们知道构成表达的人物的意义。不必要的操作是在一个上下文中进行的。 Spring主要以Spring Expression Language(Spel)为例。这里快速提个醒,SpEL是一种由Spring的org.springframework.expression.ExpressionParser实现分析和执行的语言。这些实现使用作为字符串给出的Spel表达式,并将它们转换为org.springframework.expression.Expression的实例。上下文组件由org.springframework.expression.Ev...
wangchen1999 发布于 3个月前 阅读 43

sharding-jdbc源码解析之sql执行

天河 欢迎关注“天河聊技术”微信公众号关注更多精彩内容
天河2018 发布于 2个月前 阅读 44

github+hexo搭建博客,push本地代码到github出错

- 在git客户端上传的时候一直报错,显示无法上传到github - 报错信息如下 ``` $ git push -u origin master To git@github.com:**/Demo.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ‘git@github.com:**/Demo.git’ hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull’) hint: before pushing again. hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details. ``` - 解决方法(问度娘的,因为自己是刚搭建的,所以选择了第一种,强制push,若是你已经搭建好的博客,还是选择其他几种方法——>第一种最省事,最快) - 原因:远程repository和我本地的repository冲突导致的,而在创建版本库后,在github的版本库页面点击了创建README.md文件的按钮创建了说明文档,但是却没有pull到本地。这样就产生了版本冲突的问题。 - 方法如下几种: 1. 使用强制push的方法: ``` $ git push -u origin master -f ``` - 这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。 2. push前先将...
运维小白 发布于 2个月前 阅读 23

springboot事务相关(druid+mybatis)

# springboot事务相关 ## 1. 开启全局事务支持 * SpringbootApplication中 启用配置`@EnableTransactionManagement`, 用来支持[@Transactional](https://my.oschina.net/u/3770144) * 开启APO配置支持`@EnableAspectJAutoProxy (exposeProxy = true)` 用来支持aop方式的自动事务配置 > 其中 exposePorxy默认false, 设为true,才可使用`AopContext.currentProxy()`获取TreadLocal中当前类的代理实例 ## 2. 新建测试类及接口 **总结** * `spring.datasource.druid.default-auto-commit = true` 或 `false` 对事务执行无影响,可以不用配置, 事务生启的时候会将`connection.autocommit=false` * B.b1 -> A.save 事务有效 * B.b1 -> A.a1 -> this.save 时,事务无效 > 原因: a1方法中调用本地的save时,未通过proxy代理走 > 生效事务: `a1 -> AopContext.currentProxy().save()` **** **2.1 配置类** >`execution(* org.arrow.service.TestService.*(..))` `save* 配置 REQUIRED 事务` **2.2 业务接口相关方法** ``` public void saveTest1() { for (int i = 0; i < 3; i++) { Test1 test1 = new Test1(); test1.setSeq("test1_" + i); test1Mapper.insertSelective(test1); }...
sunnyivan 发布于 2个月前 阅读 45

如何在IDEA 中使用Git

如何在IDEA 中使用Git 1,下载最新的 git 包 地址: https://git-scm.com/download/win 下载便携版 64,32 根据个人爱好   2,解压后随便放个位置即可,例如图: (windows版可直接安装,原作者建议自己解压,个人爱好自己选)     3,打开Idea  File—> Setting.   4, 设置Git exe  如下图       5,  Test   OK 完事   开始拉项目:   1,  如下图,   2,如下图   3,Then   4,等        几秒或 几十秒以后,根据项目大小不同及网络环境差异时间不同,内网会比较快。     5,  下载代码完成后     This Window  使用当前编辑器打开。   New Window 使用新打开的编辑器打开, 一般用这个。   6, 然后看到的大概是这个样子:     右边的Maven 窗口 没有加载, 按说明 点下   一般就可以刷出来。
keppy 发布于 2个月前 阅读 16

18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建

## 18.6 负载均衡集群介绍 ``` 主流开源软件LVS、keepalived、haproxy、nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用 keepalived的负载均衡功能其实就是lvs lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求 ``` ## 18.7 LVS介绍 ``` LVS是由国人章文嵩开发 流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高 LVS最新版本基于Linux内核2.6,有好多年不更新了 LVS有三种常见的模式:NAT、DR、IP Tunnel LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs) LVS NAT模式 这种模式借助iptables的nat表来实现 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去 rs需要设定网关为分发器的内网ip 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈 在nat模式中,只需要...
夜归人8421 发布于 2个月前 阅读 14

深入理解java线程池—ThreadPoolExecutor 全

线程池有多重要##### 线程是一个程序员一定会涉及到的一个概念,但是线程的创建和切换都是代价比较大的。所以,我们有没有一个好的方案能做到线程的复用呢?这就涉及到一个概念——线程池。合理的使用线程池能够带来3个很明显的好处: 1.降低资源消耗:通过重用已经创建的线程来降低线程创建和销毁的消耗 2.提高响应速度:任务到达时不需要等待线程创建就可以立即执行。 3.提高线程的可管理性:线程池可以统一管理、分配、调优和监控。 java多线程池的支持——ThreadPoolExecutor##### java的线程池支持主要通过ThreadPoolExecutor来实现,我们使用的ExecutorService的各种线程池策略都是基于ThreadPoolExecutor实现的,所以ThreadPoolExecutor十分重要。要弄明白各种线程池策略,必须先弄明白ThreadPoolExecutor。 1. 实现原理##### 首先看一个线程池的流程图: Paste_Image.png step1.调用ThreadPoolExecutor的execute提交线程,首先检查CorePool,如果CorePool内的线程小于CorePoolSize,新创建线程执行任务。 step2.如果当前CorePool内的线程大于等于CorePoolSize,那么将线程加入到BlockingQueue。 step3.如果不能加入BlockingQueue,在小于MaxPoolSize的情况下创建线...
xiaomin0322 发布于 2周前 阅读 26

Spark加载外部配置文件

--files path启动加载配置文件 在spark-streaming程序中需要配置文件中的数据来完成某项统计时,需要把配置文件打到工程里,maven的配置如下:   [html] view plain copy <build>          <plugins>              <plugin>                  <groupId>org.apache.maven.plugins</groupId>                  <artifactId>maven-surefire-plugin</artifactId>                  <configuration>                      <skip>true</skip>                  </configuration>              </plugin>          </plugins>          <resources>              <resource>                  <directory>src/main/resources</directory>                  <includes>                      <include>**/*.txt</include>                      <include>*.txt</include>                  </includes>     ...
Zero零_度 发布于 3个月前 阅读 114

centos6.5安装zookeeper

1.下载并上传zookeeper到服务器 下载地址:http://apache.fayea.com/zookeeper/ 2.移动文件夹到指定位置并解压 mv zookeeper-3.4.11.tar.gz /usr/my cd /usr/my tar -zxvf zookeeper-3.4.11.tar.gz 3.到配置文件夹下复制和修改配置文件中数据文件夹的位置 cd zookeeper-3.4.11/conf cp zoo_sample.cfg zoo.cfg vim zoo.cfg 4.到指定位置创建data文件夹 mkdir /usr/my/zookeeper-3.4.11/data   5.配置环境变量,保存退出 vim /etc/profile export ZOOKEEPER=/usr/my/zookeeper-3.4.11 export PATH=$PATH:$ZOOKEEPER   6.使资源文件生效并启动zookeeper source /etc/profile zkServer.sh start  
_Artisan 发布于 2个月前 阅读 28

springCloud主要依赖

  <!-- 注册中心 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- 服务轨迹跟踪 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <!-- 配置中心服务器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- 配置总线依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <!-- 监控埋点 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>  ...
xiongsheng 发布于 3个月前 阅读 91

ios 关于UIImageView的显示问题——居中显示或者截取图片的中间部分显示

我们都知道在ios中,每一个UIImageView都有他的frame大小,但是如果图片的大小和这个frame的大小不符合的时候会怎么样呢?在默认情况,图片会被压缩或者拉伸以填满整个区域。 通过查看UIView的属性可以知道,view的contentMode属性可以用来控制图片的显示情况。下面的设置可以让图片进行居中显示。 imageView.contentMode =  UIViewContentModeCenter;     这个居中是包括了,横向和纵向都是居中。图片不会拉伸或者压缩,就是按照imageView的frame和图片的大小来居中显示的。 这里有两种情况: 1、图片比view的区域更大。这个时候会截取图片的中间部位显示在frame区域里面。 2、图片比view的区域更小。这个时候图片会完整的显示在frame的中间位置。 如果在默认情况,图片的多出来的部分还是会显示屏幕上。如果不希望超过frame的区域显示在屏幕上要设置。clipsToBounds属性。 imageView.clipsToBounds  = YES;   最后一个问题,在iphone的retina屏幕上面,必须要设置,contentScaleFactor属性。这个属性的默认值是1。二对应的retina屏幕需要是2.可以通过下面的方式来设置: [imageView setContentScaleFactor:[[UIScreen mainScreen] scale]];   但是用: ...
壹峰 发布于 3个月前 阅读 28

8、Eclipse导入导出配置文件

一、导出     1.打开File——Export——General——Preferences ,弹框如下: (红线的部分是需要注意的)配置文件是epf的后缀   二、导入 1.打开File——Import——General——Preferences,弹框如下: (红线的部分是需要注意的)注意导入配置文件的路径  
静以修身2025 发布于 2个月前 阅读 20

CentOS7.4安装Java8

官网下载Jdk8Linux64位版本; 使用MobaXterm工具连接远程Linux系统; 上传刚才下载好的文件到远程系统下 /usr/local/ 文件夹; 先进入压缩包所在目录再输入命令解压jdk(复制下面命令按shift+insert粘贴); cd /usr/local/ tar -zxvf jdk-8u161-linux-x64.tar.gz  解压完成; 找到/etc 文件夹下的 profile文件,双击用编辑器(notepad++)打开,在文件的末尾加入; JAVA_HOME=/usr/local/jdk1.8 #你的java安装路径 JRE_HOME=/usr/local/jdk1.8/jre #jre路径 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export JAVA_HOME JRE_HOME PATH CLASSPATH 然后输入java -version命令查看是否安装成功;   By:Crazy...
Crazyx 发布于 2个月前 阅读 48 点赞 1

6月25日至27日,为何全球开源大咖齐聚国家会议中心?LC3来啦!

广告
今年6月25日至27日, LinuxCon + ContainerCon + CloudOpen(LC3)将在北京国家会议中心召开。本次会议针对开源技术在人工智能和深度学习、区块链、云原生、虚拟服务器架构和微服务、新兴技术、基础实施和自动化、IoT和M2M、KVM、Linux系统、网络编排等10大前沿领域的应用,邀请了全球数百位业界大咖,用三天时间、超过200场分享,从市场、技术、产业甚至整个生态层面,将做全方位的探讨。
LinuxCon + ContainerCon + CloudOpen(LC3)

死侍2百度云资源「bd1024p/1080p/Mp4中字」云网盘下载

  万众期待的《死侍2》终于在全球上映(除了.....),不出所料,前作曾经风靡全球,续集一来票房更是火爆,刚上映就刷爆了多项票房纪录。 死侍2影片从头到尾都很炸,是一部很罕见的既能吸引漫画粉也能受到非漫迷欢迎的漫改电影。 ·关·注·薇·xin·公·眾·號:【 蚂蚁影迷 】,进·入·影·院·搜·索·片·名·观·看       《死侍2》回归,那位嘴贱逗贫的雇佣兵又回来了。这部电影是2016年大获成功的漫改电影《死侍》的续集,已经在5月18日在美国开画了。   中文剧场版预告片 《死侍2》是一部非常罕见的续集,它继承了第一部所有的成功元素,同时也为角色重新配置了强有力的主题和优质的故事。除了瑞安·雷诺兹再次演绎的死侍之外,影片引入了漫画中的全新角色,比如深受漫迷喜爱的电索(乔什·布洛林 饰演),以及多米诺(莎姬·贝兹 饰演),同时保留了影迷期待的所有R级动作场面和幽默元素。 (我超爱第一部《死侍》,所以对我来说,很难比较到底是哪部电影更棒一些,但可以肯定的是,续集和第一部一样优秀。)
西瓜熟了 发布于 1天前 阅读 1934

记一次死锁问题分析--详解数据库innodb lock机制

因同事多线程下在同一个事务进行删除和插入操作导致数据库死锁,想解决此问题就要先了解innodb lock机制,本文将通过案例重现,结合innodb lock机制进行剖析。如有不当之处,望大神指正补充
java_龙 发布于 2周前 阅读 1847 评论 13 点赞 6

Java程序员必备的Intellij插件

善用Intellij插件可大幅提升我们的效率 以下是我用过不错的Intellij插件 1. .ignore 地址:https://plugins.jetbrains.com/plugin/7495--ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写 截图:  2. lombok 地址:https://plugins.jetbrains.com/plugin/6317-lombok-plugin 支持lombok的各种注解,从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便 截图: 3. p3c 地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines 阿里巴巴出品的java代码规范插件 可以扫描整个项目 找到不规范的地方 并且大部分可以自动修复  更多可看: https://github.com/alibaba/p3c/tree/master/idea-plugin 4. FindBugs-IDEA 地址:https://plugins.jetbrains.com/plugin/3847-findbugs-idea 检测代码中可能的bug及不规范的位置,检测的模式相比p3c更多, 写完代码后检测下 避免低级bug,强烈建议用一下,一不小心就发现很多老代码的bug 截图:  5. GsonFormat 地址:https://plugins.jetbrains.com/plugin/7654-gsonformat 一键根据json文本生成java类  非常方便 截图:  6. Maven Helper 地址:https://plugi...
Java工程师-Distance 发布于 7天前 阅读 1640 评论 5 点赞 5

死侍2迅雷高清资源[720p/中字]无偿分享

《死侍2》是20世纪福克斯影业出品的2016年动作喜剧电影《死侍》的续集。该片于2018年5月18日上映。主演瑞安·雷诺兹、导演蒂姆·米勒、编剧略特·里斯&保罗·韦尼克将悉数回归,与死侍颇有渊源的锁链(Cable)一角将出现在续集中。 第一批观众已经看完了《死侍2》,根据大部分人描述来看,这部电影会继承第一部的超级暴力和超级性感的特点。 评论家们看完电影后再推特上发表了一些评论,正面的评论都显得兴高采烈,而负面评论也只是一声“额”,所以看起来,如果你喜欢第一部,那么第二部也会比较合口味。 而即使是最负面的评论,也承认电影应该会赚个10亿美元。下面我们看一下这些人的评论吧! “《死侍2》达到了我的期望,这些角色重新聚集起来,塑造成了一部充满笑声的顶级超级英雄电影,一支有着不可阻挡力量的队伍,而且超出了这部电影本该有的走心程度。” “我不得不说,这片子真是值了R级的分级。配角和彩蛋都超级棒。” ============================== 薇.信.关.注.工.众.號:达达看看 关注成功后点击影院入口→阅读原文→进入首页输入“死侍2”即可! ============================== “我不喜欢第一部《死侍》。《死侍2》直接把我打到投降,让我非常享受。它还...
thlaonds 发布于 3天前 阅读 1469

死侍2百度云资源「bd1024p/1080p/Mp4中字」云网盘下载

 自电影开始加入视觉刺激以外的内容时,就已经获得了一个重要任务,那就是如何吸引目标群体。这个概念对于简单的视觉刺激是不存在的——对特定的类型和内容(血浆/特效/爆炸)你可以不感冒或者已经习惯,但从设计角度来看,这种针对生理的感官刺激是不会针对观众群体加以区分的——然而,对于那些聪明的电影,或者任何想变得聪明的电影来说,一个必须仔细考虑的内容,就是它的观众是谁:谁会对你的电影产生兴趣?他们有什么样的背景和偏好?能否理解和愿意理解电影的主张? 死侍2资源   Last but not least,他们是否愿意为你的电影掏钱?   能为电影招揽更多观众入场固然很好,但对于好的电影人来说,能够在目标观众那里产生良好共鸣resonation,远远要比拿到了更高票房,但被漫山遍野自作聪明和自我膨胀的半吊子中年油腻恐龙男们唧唧歪歪指指点点,要更有成功感。   If they're not for you, just shut it and leave. 死侍2 香港宣传海报   在这一重意义上,《死侍》的出现就显得格外重要。头一次,好莱坞大制片厂出品的电影,不是为了吸引更多观众,去将电影风格改变成更加通俗化的视听语言,而是以小众和亚文化出发,首先保护住了角色和故事的完整原始属性,进...
lshdff 发布于 1天前 阅读 1266

中国人自己的框架——蚂蚁金服RPC框架结构分析

SOFA开源项目让不在蚂蚁金服工作的程序员也能获得阿里的项目经验
码洞 发布于 2天前 阅读 761 评论 6

一场版本升级引发的性能血案的追凶过程

## 1. 故事的开始 上周 ActFramework 推出 [act-1.8.8-RC4 版本](https://www.oschina.net/news/96046/act-starter-1-8-8-0-released) 后, 我兴致勃勃更新了 [TFB 性能 PK 项目](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Java/act) 到最新版, 经过漫长的 60 小时 ( TFB 的一次运行周期是 60 小时) 等待后终于等来了 .............................................. 噩耗: Act 这次的性能骤然下降, 不同测试的下降范围从 60% 到 90% 不等! 不多说了, 说起来都是泪啊. 先上图吧 (为了更加切合重点, 设置了测试过滤, 只显示 Java 全栈框架, 且排除掉了直接用 JDBC 的测试项目): ### 1.1 JSON 测试 [act-1.8.1](https://www.techempower.com/benchmarks/#section=test&runid=61ff99e2-2392-4d7a-b6af-a5f081c5e004&hw=ph&test=db&l=hra0e7&c=6&o=4) ![image](https://user-images.githubusercontent.com/216930/40289132-043035a0-5cfa-11e8-972e-90df52a5b938.png) [act-1.8.8-RC4](https://www.techempower.com/benchmarks/#section=test&runid=ae097e87-3b23-402c-8f51-1608e16dd11a&hw=ph&test=json&l=hra0e7&c=6&o=4) ![image](http...
罗格林 发布于 7天前 阅读 2442 评论 18 点赞 9

Java下载CSV文件

```java @GetMapping("/download") public void download(HttpServletResponse response, @RequestParam String path) throws Exception { // 让servlet用UTF-8转码,默认为ISO8859 response.setCharacterEncoding("UTF-8"); File file = new File(path); if (!file.exists()) { // 让浏览器用UTF-8解析数据 response.setHeader("Content-type", "text/html;charset=UTF-8"); response.getWriter().write("文件不存在或已过期,请重新生成"); return; } String fileName = URLEncoder.encode(path.substring(path.lastIndexOf("/") + 1), "UTF-8"); response.setContentType("text/csv"); response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", fileName)); InputStream is = null; OutputStream os = null; try { is = new FileInputStream(path); byte[] buffer = new byte[1024]; os = response.getOutputStream(); int len; while((len = is.read(buffer)) > 0) { os.write(buffer,0, len); } }catch(Exception e) { throw new RuntimeException(e); }finally { try { if (is != null) is.close(); if (os != null) os.close(); } c...
tianshl 发布于 2个月前 阅读 19938

Postman自动登录,请求带token

![这里写图片描述](http://img.blog.csdn.net/20180323182705200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](http://img.blog.csdn.net/20180323182719115?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) #### 添加一个环境 ``` Manage Environments(右上角的齿轮) => Add => 填写环境的名称 => Add ``` #### 添加登录接口 ``` # 比正常的请求多设置一下 "Tests" # 将登录接口返回的response中的token加入环境变量, 如: pm.environment.set("token", JSON.parse(responseBody).data.authorization); ``` #### 添加一个集合 ``` 1. New collection (左侧 目录) 2. 填写名称,如:"需要token的请求" 3. 切换到选项卡"Authorization" 4. 选择相应的 TYPE 5. Token 中填写 {{token}} 6. 点击Create 创建集合 ``` #### 添加需要token的请求 ``` 在刚创建的集合中添加的请求, Headers中都会自动添加 token, 如果token失效, 重新请求一下登录接口即可...
tianshl 发布于 2个月前 阅读 28075

简易html视频播放器

### 文件列表 ``` root@tianshl:/data/video# ls hch.mp4 test.mp4 xyx.mp4 index.html video.list jquery.js ``` ###### index.html ```html 视频列表 ``` ###### video.list ``` # 该目录下的所有MP4文件, 供jQuery解析 root@tianshl:/data/video# ls *.mp4 > video.list ``` ### nginx配置 ``` user root; worker_processes 1; events { worker_connections 1024; } http { include mime.types; sendfile on; keepalive_timeout 65; server { listen 8000; server_name 本机IP; location / { # 前两行是认证(可不加) auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd.db; # 路径 root /data/video; # 首页 index index.html; } } } ``` ### 界面展示 ``` http://localhost:8000 ``` ###### 认证 ![这里写图片描述](https://img-blog.csdn.net/20180423110432301?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9idWRpbmcwMDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) ###### 播放器 ![这里写图片描述](https://img-blog.csdn.net/20180423105900537?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9idWRpbmcwMDc=/f...
tianshl 发布于 1个月前 阅读 15189 点赞 1

SFTP服务搭建及基础配置

### 前言 ``` 在某些情况下,允许指定用户可以传输文件到linux系统中,但是不允许使用SSH,要实现这一目的我们可以使用SFTP,并构建chroot环境. 一般只要服务器开启了SSH服务默认就可以使用SFTP服务,只要设置一下权限即可,比如将用户限制到某个目录下. ``` ### 环境 ``` root@tianshl:~# uname -a Linux tianshl 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux root@tianshl:~# ssh -V OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016 # ssh需要OpenSSH4.8p1以后的版本.因为要使用chroot设置根目录 ``` ### sftp服务搭建及基础配置 ###### 创建根目录和组 ``` # 创建根目录 root@tianshl:~# mkdir /sftp # 设置属主及权限 root@tianshl:~# chown root:root /sftp root@tianshl:~# chmod 755 /sftp # 创建用户组 root@tianshl:~# groupadd sftp ``` ###### 设置SFTP服务用户目录权限 ``` # 备份配置文件 root@tianshl:~# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 修改配置文件 root@tianshl:~# vim /etc/ssh/sshd_config # 修改内容如下: # 注释掉 # Subsystem sftp /usr/lib/openssh/sftp-server # ...
tianshl 发布于 1个月前 阅读 13356 点赞 1

JHipster修改JDL中的entity

## 更新model #### 需求 ``` 概览表增加"创建时间,修改时间,软删除" ``` #### 以往的方式 ###### 1. 修改model.jh, 在实体 Overview 中增加三个属性 ``` /** * 数据概览 -- 概览 */ entity Overview { id Long, ... /* 以下属性为新增的属性 */ /* 创建时间 */ createTime ZonedDateTime, /* 更新时间 */ updateTime ZonedDateTime, /* 是否删除 */ delFlag Boolean, } ``` ###### 2. 生成配置文件 ``` jhipster import-jdl model.jh ``` ###### 3. 运行项目使配置生效 ``` 运行项目时提示"Validation Failed",原因是配置文件的MD5值不同, 此时需要以下操作 1. 修改 DATABASECHANGELOG 表中相关记录的 MD5SUM 2. 在overview表中手动新增三个属性. ``` #### 现在的方式 ###### 1. 修改model.h, 在实体 Overview 中增加三个属性 ###### 2. 生成配置文件 ###### 3. 修改生成的配置文件 ``` src/main/resources/config/liquibase/changelog/20180302095615_added_entity_Overview.xml 将 changeSet中新增的三个column提取至新的changeSet中, 如下: 注意: changeSet的id不能与之前的相同 ``` ###### 4. 运行项目使配置生效 ``` 不需要手动修改MySQL,自动生效 ```...
tianshl 发布于 3个月前 阅读 37654

Java使用sftp定时下载文件

### 添加依赖 ``` com.jcraft jsch 0.1.54 ``` ### 增加配置 ``` sftp: ip: 192.168.1.60 port: 22 timeout: 60000 retryTime: 3 admin: username: admin password: 2k3xrYjbd930. ``` ### 代码示例 ``` 每天凌晨1点在多个用户目录中下载csv文件至本地tmp目录 ``` ``` @Service public class SftpTask extends Thread { private ChannelSftp sftp; private Session session; @Value("${sftp.admin.username}") private String username; @Value("${sftp.admin.password}") private String password; @Value("${sftp.host}") private String host; @Value("${sftp.port}") private Integer port; private SftpService sftpService; public EtlSftpTask (SftpService sftpService) { this.sftpService = sftpService; } /** * 建立sftp连接 */ private void connect(){ try { JSch jSch = new JSch(); session = jSch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); sftp = (ChannelSftp) channel; }catch (...
tianshl 发布于 2周前 阅读 7081

Maven项目一键部署

### 免登陆 ``` # 生成秘钥 tianshl:.ssh tianshl$ ssh-keygen -t rsa -P '' # 将公钥添加至服务器的authorized_keys中 tianshl:.ssh tianshl$ ssh-copy-id -i ./id_rsa.pub root@192.168.1.54 ``` ### 创建脚本 ``` # 项目根目录下创建脚本,名为:update.sh, 内容如下 #!/usr/bin/env bash # 更新 git pull # 打包 mvn clean package -Dmaven.test.skip=true # 上传 scp target/etl-0.0.1-SNAPSHOT.war root@192.168.1.54:/root/ # 删除原日志 | 终止服务 | 启动服务 | 查看启动日志 ssh root@192.168.1.54 "rm etl.log; ps -ef | grep etl | awk '{print $2}' | xargs kill -9; nohup ./etl-0.0.1-SNAPSHOT.war > etl.log 2>&1 &; tail -f etl.log" ``` ### 配置IDE ``` Run / Edit Configurations... / "+" / Bash 1. Name 填写 2. Script 选择 update.sh 3. Working directory 选择 项目根目录 ```...
tianshl 发布于 2个月前 阅读 29394

Packet for query is too large

### 前言 ##### max_allowed_packet ``` mysql根据max_allowed_packet限制server接收数据包的大小, 数据量超过这个限制时会导致写入或更新失败. ``` ##### 查看当前限制 ``` show VARIABLES like '%max_allowed_packet%'; ``` ### 修改 ``` 以下提供两种修改方式 ``` ##### 1. 修改配置文件 ``` # 查看配置文件路径 mysql --help | grep my.cnf # 修改 vim /etc/my.cnf 在[mysqld]段增加或修改以下内容: max_allowed_packet = 5M # 重启mysql service mysql restart ``` ##### 2. 命令行修改 ``` # 登录mysql mysql -u root -p # 运行指令 set global max_allowed_packet = 5*1024*1024 # 如果上条命令无效: # set @@max_allowed_packet=5*1024*1024 # 重启mysql service mysql restart # ubuntu service mysqld restart # centos ```...
tianshl 发布于 1个月前 阅读 17748

你了解的工厂模式可能有误

工厂模式,与简单工厂模式
温安适 发布于 3天前 阅读 559 评论 5 点赞 3

Spring Cloud Zuul中使用Swagger汇总API接口文档

> 有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中?之前给大家的回复都只是简单的说了个思路,昨天正好又有人问起,索性就举个例子写成博文供大家参考吧。 如果您还不了解`Spring Cloud Zuul`和`Swagger`,建议优先阅读下面两篇,有一个初步的了解: - [Spring Cloud构建微服务架构:服务网关(基础)](http://blog.didispace.com/spring-cloud-starter-dalston-6-1/) - [Spring Boot中使用Swagger2构建强大的RESTful API文档](http://blog.didispace.com/springbootswagger2/) > 本文首发于:http://blog.didispace.com/Spring-Cloud-Zuul-use-Swagger-API-doc/ > > **如果您有本文的需求,也可以看看我的这个开源项目,可以直接使用:https://gitee.com/didispace/swagger-butler** ### 准备工作 上面说了问题的场景是在微服务化之后,所以我们需要先构建两个简单的基于Spring Cloud的微服务,命名为`swagger-service-a`和`swagger-service-b`。 下面只详细描述一个服务的构建内容,另外一个只是名称不同,如有疑问可以在文末查...
程序猿DD 发布于 3天前 阅读 569 评论 2

RPC框架实践之:Google gRPC

gRPC是Google开源的通用高性能RPC框架,它支持的是使用**Protocol Buffers**来编写Service定义,支持较多语言扩平台并且拥有强大的二进制序列化工具集。
CodeSheep 发布于 7天前 阅读 2364 评论 1 点赞 3

京东Java架构师讲解购物车的原理及Java实现

今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗?  2)用户登陆了用户名密码,添加商品,关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗?    3)用户登陆了用户名密码,添加商品, 关闭浏览器,然后再打开,登陆用户名和密码  问:购物车商品还在吗? 4)用户登陆了用户名密码,添加商品, 关闭浏览器 外地老家打开浏览器  登陆用户名和密码 问:购物车商品还在吗? 上面四个问题都是以京东为模板, 那么大家猜猜结果是什么呢? 1)在 2)不在了 3)在 4)在 如果你能够猜到答案, 那么说明你真的很棒, 那么关于这四点是怎么实现的呢? (如果有不认可的小伙伴可以用京东实验一下) 下面我们就来讲解下购物车的原理,最后再来说下具体的code实现. 1)用户没有登录, 添加商品, 此时的商品是被添加到了浏览器的Cookie中, 所以当再次访问时(不登录),商品仍然在Cookie中, 所以购物车中的商品还是存在的. 2)用户登录了,添加商品, 此时会将Cookie中和用户选择的商品都添加到购物车中, 然后删除Cookie中的商品. 所以当用户再次访问(不登录),此时Cooki...
Java工程师-Distance 发布于 2周前 阅读 6782 评论 43 点赞 15

Why c++ coroutine?Why libgo?

讲述C++协程的近况、设计与实现中的细节与决策
Li_Mr 发布于 5天前 阅读 2927 评论 46 点赞 7

Failed: error connecting to db server: server returned error on SASL authentication step: Authentica

一:问题描述 备份时,报错:   [root@ser6-51 ~]# mongodump  -d myTest -o /backup/mongodb/all_bak_20150619.bak -u=superuser -p=123456 2015-06-29T10:17:10.784+0800 Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed. 二:解决办法 添加--authenticationDatabase admin 如:   [root@ser6-51 mongodb]# mongodump  -d myTest -o /backup/mongodb/all_bak_20150619.bak -u superuser -p=123456 --authenticationDatabase admin 2015-06-29T10:24:21.427+0800 writing myTest.system.indexes to /backup/mongodb/all_bak_20150619.bak/myTest/system.indexes.bson 2015-06-29T10:24:21.428+0800 writing myTest.t to /backup/mongodb/all_bak_20150619.bak/myTest/t.bson 2015-06-29T10:24:21.428+0800 writing myTest.t2 to /backup/mongodb/all_bak_20150619.bak/myTest/t2.bson 2015-06-29T10:24:21.429+0800 writing myTest.t metadata to /backup/mongodb/all_bak_20150619.bak/myTest/t.metadata.json 2015-06-29T10:24:21.429+0800 wr...
Airship 发布于 2小时前 阅读 3

多线程编程之两阶段终止模式

       对于多线程编程,如何优雅的终止子线程,始终是一个值得考究的问题。如果直接终止线程,可能会产生三个问题: - 子线程当前执行的任务可能必须要原子的执行,即其要么成功执行,要么就不执行; - 当前任务队列中还有未执行完的任务,直接终止线程可能导致这些任务被丢弃; - 当前线程占用了某些外部资源,比如打开了某个文件,或者使用了某个Socket对象,这些都是无法被垃圾回收的对象,必须由调用方进行清理。        由此可见,如何优雅的终止一个线程,并不是一个简单的问题。常见的终止线程的方式是,声明一个标志位,如果调用方要终止其创建的线程的执行,就将该标志位设置为需要终止状态,子线程每次执行任务之前会检查该标志位,如果为需要终止状态,就不继续执行任务,而是进行当前线程所占用资源的一些清理工作,如关闭Socket和备份当前未完成的任务,清理完成之后结束当前线程的调用。        两阶段终止模式使用的就是上述方式进行多线程的终止的,只不过其将线程的终止封装为一个特定的框架,使用者只需要关注特定的任务执行方式即可,从而实现了线程的终止与任务的执行的关注点的分离。两阶段终止模式的UML图如下: ![两阶段终止...
张旭峰 发布于 2小时前 阅读 3

ElasticSearch客户端注解使用介绍

The best elasticsearch highlevel java rest api-----bboss  1.ElasticSearch客户端bboss提供了一系列注解 @ESId  用于标识实体对象中作为docid的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,默认为true-保存,false不保存,字段名称为属性名称。ESId可用于添加和修改文档 @ESParentId 用于标识实体对象中作为parentid的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,默认为true-保存,false不保存,字段名称为属性名称。ESParentId可用于添加和修改文档 @ESVersion 用于标识实体对象中作为文档版本信息的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESVersion可用于修改文档操作 @ESVersionType 用于标识实体对象中作为文档版本类型信息的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESVersionType可用于修改文档操...
bboss 发布于 2小时前 阅读 6

Docker系列教程25-练习:使用Docker Compose编排WordPress博客

> 原文:,转载请说明出处。 本节,我们来使用Docker Compose编排WordPress博客。 ```yaml version: '2' services: mysql: image: mysql:5.7 expose: - "3306" environment: - MYSQL_ROOT_PASSWORD=123456 wordpress: image: wordpress ports: - "80:80" environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=123456 ``` **WARNING** 这里,MySQL镜像只能用5.x的镜像,不能使用8.x的镜像。否则WordPress无法正常连接到MySQL。原因是:目前PHP 7.x(例如7.1.4)所使用的字符集与MySQL 8.x所使用的默认字符集不同:
EACDY 发布于 2小时前 阅读 4

安装PHP5、安装PHP7

## 11.10/11.11/11.12 安装PHP5 1. PHP官网www.php.net 2. 当前主流版本为5.6、5.7 3. `# cd /usr/local/src` 4. `# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz` 5. r.aminglinux.com或者从这里下载 6. `# tar zxf php-6.6.30.tar.gz` 7. `# cd php-5.6.30` 8. ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif 观察报错信息,会需要安装一些库,例如libxml2,需要安装 xml2相关`# yum install -y |grep xml2` `# yum install -y libxml2.devl` 9. 配置的时候出错了一次就会停止一次 10. `# make && make install` 11. `# /usr/local/php/bin/php -m`查看php5的模块 12. `# cp php.ini-production /...
派派菠菜 发布于 2小时前 阅读 3

Set Up a Drone CI/CD Pipeline with Kubernetes

Set Up a Drone CI/CD Pipeline with Kubernetes https://jenkins-x.io/getting-started/ I like to say that continuous delivery or CD is the most important part of Cloud Native. There are so much great tools out there and you need to pick up the right ones. A few weeks ago I was writing almost about the same topic, only with Jenkins. While the Jenkins is the most used CI/CD tool, not every team is happy with it. Jenkins has a huge number of plugins and the great set of features, but it always seems old. It is heavy and not built with containers in mind. A few days ago I read about the new Jenkins X introduction, so we will see some changes in the future. With Drone, the containers are the first class citizens. In this post, I will go through installation on Kubernetes and explain the simple pipeline. Later, you can compare how the Drone pipeline is different from the pipeline I did with Jenkins. Previous blog post Deploy Drone on Kubernetes Lucky me, there is the Drone Helm chart availab...
openthings 发布于 2小时前 阅读 6

echarts 动态 获取后台数据(定时刷新)

实用Ajax 动态获取 后台数据 应用:展示一些数据 定时刷新 setInterval(function(){setChartBar()}, 5*1000); // 间歇执行 setChartBar是被调用的方法名称
Lucky_Me 发布于 2小时前 阅读 4

spring+springMvc+struts的SSH框架整合

小疯之前工作用的框架是o3w,SSH框架只是学习的时候用过,然后今天就回头来重新回顾SSH,就在网上找了一篇比较全而且比较简单的文章来帮助自己快速的理解SSH。 1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SSHDemo</display-name> <!--直接访问项目时,依次查找下面的jsp进行显示 --> <welcome-file-list> <welcome-file>login.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!--上下文配置名字和路径配置--> <context-param> <!-- ...
野小疯 发布于 3小时前 阅读 2

EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib

python -m pip install --upgrade --force pip 失败; 如图: 环境树莓派,系统官方系统 解决方法: python -m pip install --user --upgrade --force pip 如图:  
白又白呀 发布于 3小时前 阅读 4

Spring Boot 静态资源处理

Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。 建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置进行修改。 如果想要自己完全控制WebMVC,就需要在@Configuration注解的配置类上增加@EnableWebMvc(@SpringBootApplication 注解的程序入口类已经包含@Configuration),增加该注解以后WebMvcAutoConfiguration中配置就不会生效,你需要自己来配置需要的每一项。这种情况下的配置还是要多看一下WebMvcAutoConfiguration类。 我们既然是快速使用Spring Boot,并不想过多的自己再重新配置。本文还是主要针对Spring Boot的默认处理方式,部分配置在application 配置文件中(.properties 或 .yml) 默认资源映射 我们在启动应用的时候,可以在控制台中看到如下信息: 2016-01-08 09:29:30.362 INFO 24932 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2016-01-08 09:29:30.362 INFO 24932 --- [ main] o.s.w.s.handler.SimpleUrlHandl...
惊尘大人 发布于 3小时前 阅读 4

SAS练习题总结

1、打开excel文件的某个工作表 proc print data=MYXLS.‘NORTH$'n;run; 2、KEEP语句 KEEP语句,KEEP variable(s);不能用于过程步 KEEP=选项,data-set-name(KEEP=variable(s))可以用于数据步、过程步,其中variables是具体变量,不能是数组、_N_、_ERROR_等 3、数组 数值型数组:初始值可以省略,默认为缺失值 数组说明中变量名可以省略,变量名默认为数组名+序号,序号从1开始 ARRAY test(3) Math Chinese English (0,0,0); ARRAY test(*) test3-test8; /*数组元素的个数由变量个数决定*/ ARRAY x(2,2) X11 X12 X21 X22;/*二维数组,数组元素按行排列*/ 字符型数组:需指定数组元素的最大长度,其他与数值型数组相同。 临时数组:若SAS数组中每个元素不对应变量名,即为临时数组。 ARRARY test(3) _TEMPORARY_ (0,0,0); 临时数组值用于中间计算,不保存入数据集。在数据步中,临时数组在数据步隐含循环中能自动保留上一步得到的值。 4、BY语句 BY <DESCENDING> variable-1 ... <DESCENDING> variable-n <NOTSTORED> <FROUPFORMAT> 当使用BY语句时,first.var和last.var才有效。 BY语句中变量默认是升序排列的。DESCENDING语句只作用于它后面的第一个变量。 BY语句的排序是...
tonorth123 发布于 3小时前 阅读 3

Python中读取指定文件夹多个图片使用视频播放及视频图片格式转换

1、视频转图片 #!/usr/bin/env python import cv2 vc=cv2.VideoCapture("Your_Vid's_Name.mp4") c=1 if vc.isOpened(): rval,frame=vc.read() else: rval=False while rval: rval,frame=vc.read() cv2.imwrite('The_Path_to_Save_Your_Pics'+str(c)+'.jpg',frame) c=c+1 cv2.waitKey(1) vc.release()   2、图片转视频文件 #!/usr/bin/env python import cv2 from cv2 import VideoWriter,VideoWriter_fourcc,imread,resize import os img_root="The_Address_of_Your_Pics'_folder" #Edit each frame's appearing time! fps=5 fourcc=VideoWriter_fourcc(*"MJPG") videoWriter=cv2.VideoWriter("The_Way_You_Want_to_Save_Your_Vid.avi",fourcc,fps,(1200,1200)) im_names=os.listdir(img_root) for im_name in range(len(im_names)): frame=cv2.imread(img_root+str(im_name)+'.jpg') print im_name videoWriter.write(frame) videoWriter.release()   3、Python中读取指定文件夹多个图片使用视频播放 def readImageShowVideo(imagepath): img_path = gb.glo...
漫步当下 发布于 3小时前 阅读 3

Spring Cloud 学习笔记(八) 之 源码分析 客户消费端 注册到Eureka注册中心的流程

启用客户端的入口 @EnableDiscoveryClient @SpringBootApplication public class StudyApplication { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(StudyApplication.class, args); } } 关键是@EnableDiscoveryClient,我们来看下@EnableDiscoveryClient /** * 用于启用DiscoveryClient的注释. * @author Spencer Gibb */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import(EnableDiscoveryClientImportSelector.class) public @interface EnableDiscoveryClient { /** * 如果为True,会自动的注册到本地服务上去. */ boolean autoRegister() default true; }   注册入口 org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration.java @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) public Eu...
学海无涯_ 发布于 3小时前 阅读 3

vue 图表 组件库 vue-highcharts

git https://github.com/weizhenye/vue-highcharts   安装配置 cnpm i vue-highcharts -D import VueHighcharts from 'vue-highcharts'; Vue.use(VueHighcharts); 简单折线图 效果 <template> <highcharts :options="options"></highcharts> </template> <script> var options = { title: { text: '2010 ~ 2016 年太阳能行业就业人员发展情况' }, subtitle: { text: '数据来源:thesolarfoundation.com' }, yAxis: { title: { text: '就业人数' } }, legend: { layout: 'vertical', align: 'right', verticalAlign: 'middle' }, plotOptions: { series: { label: { connectorAllowed: false }, pointStart: 2010 } }, series: [{ name: '安装,实施人员', data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175] }, { name: '工人', data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434] }, { name: '销售', data: [11744, 17722, 16005, ...
阿豪boy 发布于 4小时前 阅读 5

shiro权限管理

1.记录一下使用shiro做权限管理的过程,在此之前需要了解一下RBAC权限管理的模型,本人之前写了一个半成品,有错误的那些类可以删除掉。项目地址:https://gitee.com/bruceT/ssh 2.有关shiro的maven依赖 <!--shiro所需的jar包 version:1.2.2--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>${shiro.version}</version> </dependency> 3.首先先贴有关权限的实体代码 @Entity @Table(name="sys_user") @ExcelTarget("user") public class SysUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) privat...
_Artisan 发布于 4小时前 阅读 11

CRDT

      刚开始接触CRDT的时候,觉得它是个新东西,仔细研究后发现,好多年前就有CRDT的论文了,github上也有很多CRDT的库,那么CRDT到底是什么呢?
黑客画家 发布于 4小时前 阅读 5

MongoDB的简单学习7-Java开发

主要介绍一下MongoDB在Java中的具体使用!
wind2012 发布于 4小时前 阅读 4

将企业数据分析移至云端并非易事,需谨慎

导读 如果企业希望在云计算的新平台上实现数据仓库和数据集市的现代化,那么请注意,这并不像人们想象的那么容易。 如果企业希望在云计算的新平台上实现数据仓库和数据集市的现代化,那么请注意,这并不像人们想象的那么容易。 在企业的数据仓库和数据集市中,他们的数据通常太旧,处理过于繁琐,而且成本太高。 当今基于云计算的数据分析有能力实时处理,数据库能够以“需求速度”运行,甚至小型企业也可以将数据分析处理与最新的新兴技术结合在一起,例如机器学习和预测算法。 但事实证明,基于云计算的数据分析的路径比许多企业预计的要漫长而艰难。因此,随着IT遇到成本超支,技术无法达到预期,以及数据庞大的数据证明存在等问题,企业的业务就开始出现问题。这是为什么。 首先,从企业向公共云传输数据比预期的更麻烦,而且由于工作的大部分人工处理性质而加剧。AWS、Google、Microsoft和其他公司都有自己的技术,比如AWS的Snowball。然而,即使使用这些工具,通过流程来移动数PB字节的数据也是非常棘手的,至少可以这么说。 其次,数据集成仍然是云计算面临的一个问题。迁移数据并不会奇迹般地解决企业的集成挑战。此外,记录系统可能仍然保留在内部部署的数据中心中...
问题终结者 发布于 4小时前 阅读 4

7年iOS架构师-- 告诉你坚持写博客对我们有什么好处

一,写博客的担心 1.今天来谈谈,写博客对我的益处,说起写博客,其实我写博客的时间不长,也就10来个月时间; 2.之前工作的时候,看到同事每天晚上写博客,当时觉得很奇怪,就觉得写这个东西,非常浪费时间, 3.自己知道的好的技术或者是好的技术解决思路,如果分享出去,不是被别人学去了吗等等一系列问题. 二,自己的经历 1.等写了一段时间博客时,慢慢发现,其实之前的担心的完全没必要,你会的东西,精通的知识,即使分享出去, 2.别人也未必能学的会,即时要学会学透,也是要花费时间和精力的,所以这种担心我们大可不必.  作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。 3.人还是要有点分享和谦虚精神的,仅仅是这种只进不出的思想,我想你也很难有的发展! 4.交流使人进步,禁闭使人落后!  5.那么写博客10来个时间里,通过写博客给自己带来了哪些方面的提升呢?下面我就结合自己经力来给大家做个详细的总结. 三,写博客的好处 下面我就大家来做一个详细的分析.以思维导图的形式给大家列举一下,写博客这10来个月时...
原来是泽镜啊 发布于 4小时前 阅读 3

使用k-近邻算法改进约会网站的配对效果

为了约会网站的约会对象进行分类,通过k-近邻算法将匹配对象分到确切的分类中。
陈墨轩_CJX 发布于 4小时前 阅读 7 打赏 1

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

使用 Git-Analyze 玩转 Git

git-analyze 是一个基于 libgit2 的 git 工具集,包括 git-analyze,git-complete, git-rollback,以及 git-cheat 等
Force武装卫队 发布于 3天前 阅读 715 评论 5 点赞 2

码云即将支持 Git v2 Protocol

Git v2 Protocol aka Git Wire Protocol
Force武装卫队 发布于 4天前 阅读 1236 评论 10 点赞 4

Why c++ coroutine?Why libgo?

讲述C++协程的近况、设计与实现中的细节与决策
Li_Mr 发布于 5天前 阅读 2927 评论 46 点赞 7

一场版本升级引发的性能血案的追凶过程

## 1. 故事的开始 上周 ActFramework 推出 [act-1.8.8-RC4 版本](https://www.oschina.net/news/96046/act-starter-1-8-8-0-released) 后, 我兴致勃勃更新了 [TFB 性能 PK 项目](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Java/act) 到最新版, 经过漫长的 60 小时 ( TFB 的一次运行周期是 60 小时) 等待后终于等来了 .............................................. 噩耗: Act 这次的性能骤然下降, 不同测试的下降范围从 60% 到 90% 不等! 不多说了, 说起来都是泪啊. 先上图吧 (为了更加切合重点, 设置了测试过滤, 只显示 Java 全栈框架, 且排除掉了直接用 JDBC 的测试项目): ### 1.1 JSON 测试 [act-1.8.1](https://www.techempower.com/benchmarks/#section=test&runid=61ff99e2-2392-4d7a-b6af-a5f081c5e004&hw=ph&test=db&l=hra0e7&c=6&o=4) ![image](https://user-images.githubusercontent.com/216930/40289132-043035a0-5cfa-11e8-972e-90df52a5b938.png) [act-1.8.8-RC4](https://www.techempower.com/benchmarks/#section=test&runid=ae097e87-3b23-402c-8f51-1608e16dd11a&hw=ph&test=json&l=hra0e7&c=6&o=4) ![image](http...
罗格林 发布于 7天前 阅读 2442 评论 18 点赞 9

RPC框架实践之:Google gRPC

gRPC是Google开源的通用高性能RPC框架,它支持的是使用**Protocol Buffers**来编写Service定义,支持较多语言扩平台并且拥有强大的二进制序列化工具集。
CodeSheep 发布于 7天前 阅读 2364 评论 1 点赞 3

渐进式Web应用(PWA)入门教程(上)

最近关于渐进式Web应用有好多讨论,有一些人还在质疑渐进式Web应用是否就是移动端未来。 但在这篇文章中我并不会将渐进式APP和原生的APP进行比较,但有一点是可以肯定的,这两种APP的目标都是使用户体验变得更好。 移动端Web应用有很多优秀的概念让人应接不暇,但好在编写一个渐进式Web应用不是一个很困难的事情。在这篇文章里将向你介绍如何把一个普通的网站转换成渐进式Web应用。你可以按照这篇文章一步一步地做,做完之后你的网站将可以实现离线访问,并且可以在桌面上创建该网站的图标。那么下面即将开始入门教程。 什么是渐进式Web应用? 渐进式Web应用是一种全新的Web技术,让Web应用和原生APP的体验相近或一致。 渐进式Web应用它可以横跨Web技术及Native APP开发的解决方案,对于开发者的优势如下: 你只需要关心W3C的Web标准,不用关心各种Native APP的代码。 用户可以在安装应用之前先试用。 在渐进式Web应用中,你不需要使用各种应用商店来分发应用,也不用关心应用发布时奇怪的审核标准以及应用内购的平台抽成。另外,应用程序更新是自动进行的,无需用户交互,所以整体的使用体验对于用户来讲更为的平滑。 渐进式Web应用的“安装”过程很快,只需要在主屏幕上添...
葡萄城控件技术团队 发布于 1周前 阅读 1274 评论 2

京东Java架构师讲解购物车的原理及Java实现

今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗?  2)用户登陆了用户名密码,添加商品,关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗?    3)用户登陆了用户名密码,添加商品, 关闭浏览器,然后再打开,登陆用户名和密码  问:购物车商品还在吗? 4)用户登陆了用户名密码,添加商品, 关闭浏览器 外地老家打开浏览器  登陆用户名和密码 问:购物车商品还在吗? 上面四个问题都是以京东为模板, 那么大家猜猜结果是什么呢? 1)在 2)不在了 3)在 4)在 如果你能够猜到答案, 那么说明你真的很棒, 那么关于这四点是怎么实现的呢? (如果有不认可的小伙伴可以用京东实验一下) 下面我们就来讲解下购物车的原理,最后再来说下具体的code实现. 1)用户没有登录, 添加商品, 此时的商品是被添加到了浏览器的Cookie中, 所以当再次访问时(不登录),商品仍然在Cookie中, 所以购物车中的商品还是存在的. 2)用户登录了,添加商品, 此时会将Cookie中和用户选择的商品都添加到购物车中, 然后删除Cookie中的商品. 所以当用户再次访问(不登录),此时Cooki...
Java工程师-Distance 发布于 2周前 阅读 6782 评论 43 点赞 15

记一次死锁问题分析--详解数据库innodb lock机制

因同事多线程下在同一个事务进行删除和插入操作导致数据库死锁,想解决此问题就要先了解innodb lock机制,本文将通过案例重现,结合innodb lock机制进行剖析。如有不当之处,望大神指正补充
java_龙 发布于 2周前 阅读 1847 评论 13 点赞 6

深入浅出设计模式——从球赛中悟多例模式

之前有讲过单例模式,多例模式实际上可以看作是单例模式推广。在多例模式中,多例类可以有多个实例,并且多例类要负责创建、管理并且向外提供自己的实例。
珂jack 发布于 2周前 阅读 939 评论 5 点赞 2

理解 Dubbo SPI 扩展机制

写在前面         最近接触了 gRPC 体会到虽然众多 RPC 框架各有各的特点但是他们提供的特性和功能有很多的相似之处 , 这就说明他们面对同样的分布式系统带来的问题。从 2016 年左右开始接触到 dubbo ,基本停留在使用的层面,对 dubbo 的设计以及着重要解决的问题都没有系统的研究过,通过对 dubbo 和其他类似 RPC 产品的系统学习 ,学习分布式系统中面临的共同问题以及解决之道。    微内核架构         微内核架构 (Microkernel architecture) 模式也被称为插件架构 (Plugin architecture) 模式。原本与内核集成在一起的组件会被分离出来,内核提供了特定的接口使得这些组件可以灵活的接入,这些组件在内核的管理下工作,但是这些组件可以独立的发展、更改(不会对现有系统造成改动),只要符合内核的接口即可。典型的例子比如 , Eclipse , IDEA 。                           Dubbo 的微内核设计         根据我个人对 Dubbo 微内核设计的理解,以及阅读源码后总结。视觉总是最直观的,可以让大脑最快速度的有一个最直观的认识,一开始就一头深入到源码的细节中只会让人迷糊。不理解 Dubbo 的微内核设计架构的话,学...
j4love 发布于 2周前 阅读 1697 评论 2

在浏览器中进行深度学习:TensorFlow.js (六)构建一个卷积网络 Convolutional Network

在上一篇中,我们介绍了了用TensorflowJS构建一个神经网络,然后用该模型来进行手写MINST数据的识别。和之前的基本模型比起来,模型的准确率上升的似乎不是很大。(在我的例子中,验证部分比较简单,只是一个大致的统计)甚至有些情况下,如果参数选择不当,训练效果还会更差。 卷积网络,也叫做卷积神经网络(con-volutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。对于MINST手写数据来说,应用卷积网络会不会是更好的选择呢? 先上图: 代码见Codepen 该图是我应用CNN对MINST数据进行训练的结果,准确率在97%,可以说和之前的模型来比较,提高显著。要知道,要知道在获得比较高的准确率后,要提高一点都是比较困难的。那我们就简单的看看卷积网络是什么,他为什么对于手写数据的识别做的比其他模型的更好? CNN的原理实际上是模拟了人类的视觉神经如何识别图像。每个视觉神经只负责处理不同大小的一小块画面,在不同的神经层次处理不同的信息。 卷积和核 大家可能有用过Photoshop的经验,Photoshop提供很多不同类型的...
naughty 发布于 2周前 阅读 1410 评论 12 点赞 4

高并发大容量NoSQL解决方案探索

大数据时代,企业对于DBA也提出更高的需求。同时,NoSQL作为近几年新崛起的一门技术,也受到越来越多的关注。本文将基于个推SRA孟显耀先生所负责的DBA工作,和大数据运维相关经验,分享两大方向内容:一、公司在KV存储上的架构演进以及运维需要解决的问题;二、对NoSQL如何选型以及未来发展的一些思考。 据官方统计,截止目前(2018年4月20日)NoSQL有225个解决方案,具体到每个公司,使用的都是其中很小的一个子集,下图中蓝色标注的产品是当前个推正在使用的。 NoSQL的由来 1946年,第一台通用计算机诞生。但一直到1970年RDMBS的出现,大家才找到通用的数据存储方案。到21世纪,DT时代让数据容量成为最棘手的问题,对此谷歌和亚马逊分别提出了自己的NoSQL解决方案,比如谷歌于2006年提出了Bigtable。2009年的一次技术大会上,NoSQL一词被正式提出,到现在共有225种解决方案。 NoSQL与RDMBS的区别主要在两点:第一,它提供了无模式的灵活性,支持很灵活的模式变更;第二,可伸缩性,原生的RDBMS只适用于单机和小集群。而NoSQL一开始就是分布式的,解决了读写和容量扩展性问题。以上两点,也是NoSQL产生的根本原因。 实现分布式主要有两种手段:副本(Replication)和分片(...
illy安智 发布于 2周前 阅读 2963 评论 4 点赞 6

这些年一直记不住的 Java I/O

本文目录 参考资料 前言 从对立到统一,字节流和字符流 从抽象到具体,数据的来源和目的 从简单到丰富,使用 Decorator 模式扩展功能 Java 7 中引入的 NIO.2 NIO.2 中的异步 I/O 总结 参考资料   该文中的内容来源于 Oracle 的官方文档。Oracle 在 Java 方面的文档是非常完善的。对 Java 8 感兴趣的朋友,可以从这个总入口Java SE 8 Documentation开始寻找感兴趣的内容。这一篇主要讲 Java 中的 I/O,官方文档在这里Java I/O, NIO, and NIO.2。 前言   不知道大家看到这个标题会不会笑我,一个使用 Java 多年的老程序员居然一直没有记住 Java 中的 I/O。不过说实话,Java 中的 I/O 确实含有太多的类、接口和抽象类,而每个类又有好几种不同的构造函数,而且在 Java 的 I/O 中又广泛使用了 Decorator 设计模式(装饰者模式)。总之,即使是在 OO 领域浸淫多年的老手,看到下面这样的调用一样会蛋疼: BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("somefile.txt")));   当然,这仅仅只是我为了体现 Java I/O 的错综复杂的构造函数而虚构出来的一个例子,现实中创建一个 BufferedReader 很少会嵌套这么深,因为可以直接...
Java工程师-Distance 发布于 2周前 阅读 2915 评论 11 点赞 14

基于Docker搭建MySQL主从复制

本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建。
秋田君 发布于 3周前 阅读 2906 评论 15 点赞 16

基于容器应用设计的原则,模式和反模式

容器和容器编排(Kubernetes)的广泛使用,让我们可以轻松的构建基于微服务的“云原生”(Cloud Native)的应用。容器成为了云时代的新的编程单元,类似面向对象概念下的对象,J2EE中的组件或者函数式编程中的函数。 在面向对象时代,有许多著名的设计原则,模式和反模式等,例如: SOLID (单一功能、开闭原则、里氏替换、接口隔离以及依赖反转) Design Patterns: Elements of Reusable Object-Oriented Software Anti-Pattern 在新的容器背景下,相应的原则和模式有助于帮助我们更好的构建“云原生”的应用。我们可以看到,这些原则和模式并非对之前模式的颠覆和推翻,更像是适应新环境的演进版本。 原则 单一职责原则 SINGLE CONCERN PRINCIPLE (SCP) 与OO的单一功能相对应,每一个容器应该提供单一的职责,只关注于做好一件事。单一职责使得容器更容易重用。通常容器对应于一个进程,而该进程专注于做好一件事。 高可观测性原则 HIGH OBSERVABILITY PRINCIPLE (HOP) 容器像对象一样,应该是一个封装良好的黑盒子。但是在云的环境下,这个黑盒子应该提供良好的观测接口,使得其在云的环境下得到相应的监控和管理。这样,整个应用才能提供一致的生命周期的管理。 可观测...
naughty 发布于 3周前 阅读 904 评论 4 点赞 4

秒杀架构实践

![](https://ws2.sinaimg.cn/large/006tKfTcly1fr1z9k79lrj31kw11zwt8.jpg) ## 前言 之前在 [Java-Interview](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Spike.md) 中提到过秒杀架构的设计,这次基于其中的理论简单实现了一下。 > 本次采用循序渐进的方式逐步提高性能达到并发秒杀的效果,文章较长请准备好瓜子板凳(liushuizhang😂)。 本文所有涉及的代码: - [https://gitee.com/crossoverJie/SSM](https://gitee.com/crossoverJie/SSM) - https://gitee.com/crossoverJie/distributed-redis-tool](https://gitee.com/crossoverJie/distributed-redis-tool) 最终架构图: ![系统架构设计.png](https://i.loli.net/2018/05/08/5af079ea8618b.png) 先简单根据这个图谈下请求的流转,因为后面不管怎么改进这个都是没有变的。 - 前端请求进入 `web` 层,对应的代码就是 `controller`。 - 之后将真正的库存校验、下单等请求发往 `Service` 层(其中 RPC 调用依然采用的 `dubbo`,只是更新为最新版本,本次不会过多讨论 dubbo 相关的细节,有兴趣的可以查看 [基于dubbo的分布式架构](https://crossoverjie.top/%2F2017%2F04%2F07%2FSSM11%2F))。 - `S...
crossoverJie 发布于 3周前 阅读 3206 评论 37 点赞 15

Intellij IDEA神器居然还有这些小技巧

# 概述 --- `Intellij IDEA`真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对`Intellij IDEA`的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的`Intellij IDEA`技巧分享给大家。本文是这个系列的第一篇,主要介绍一些你可能不知道的但是又实用的小技巧。 --- # 我最爱的【演出模式】 --- 我们可以使用【Presentation Mode】,将`IDEA`弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的`coding`。 可以使用`Alt+V`快捷键,弹出`View`视图,然后选择`Enter Presentation Mode`。效果如下: ![这里写图片描述](https://img-blog.csdn.net/20180506101049248?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnNvbmdiaW4x/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 这个模式的好处就是,可以让你更加专注,因为你只能看到特定某个类的代码。可能读者会问,进入这个模式后,我想看其他类的代码怎么办?这个时候,就要考验你快捷键的熟练程度了。你可以使用`CTRL+E`弹出最近使用的文件。又或者使用`CTRL+N`和`CTRL+SHIFT+N`定位文件。 如何退出这个模式呢?很简单,使用`ALT+V`弹出view视图,然后选择`Ex...
Sam哥哥聊技术 发布于 3周前 阅读 8572 评论 69 点赞 32 打赏 1

接口方法上的注解无法被@Aspect声明的切面拦截的原因分析

Spring中使用MyBatis的Mapper接口自动生成时,用一个自定义的注解标记在Mapper接口的方法中,@Aspect定义一个切面拦截这个注解以记录日志或者执行时长。但是惊奇的发现,在Spring Boot 1.X(Spring Framework 4.x)中,并不能生效,而在Spring Boot 2.X(Spring Framework 5.X)中却能生效。这是为什么呢?
光闪 发布于 3周前 阅读 1535 评论 8 点赞 9

利用Zipkin追踪Mysql数据库调用链

![Profile](https://upload-images.jianshu.io/upload_images/9824247-2f04485338ca6443.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) --- ## 概述 在前面:[微服务调用链追踪中心搭建](https://www.jianshu.com/p/da80ea881424) 一文中我们利用Zipkin搭建了一个微服务调用链的追踪中心,并且模拟了微服务调用的实验场景。利用Zipkin的库Brave,我们可以收集一个客户端请求从发出到被响应 **经历了哪些组件**、**哪些微服务**、**请求总时长**、**每个组件所花时长** 等信息。 本文将讲述如何利用Zipkin对Mysql数据库的调用进行追踪,这里同样借助OpenZipkin库Brave来完成。 --- ## 扩展ZipkinTool组件 ZipkinTool是在[《微服务调用链追踪中心搭建》](https://www.jianshu.com/p/da80ea881424)一文中编写的与Zipkin通信的工具组件,利用其追踪微服务调用链的,现在我们想追踪Mysql数据库调用链的话,可以扩展一下其功能。 - pom.xml添加依赖: ``` io.zipkin.brave brave-mysql 4.0.6 ``` - 在ZipkinConfiguration类中添加MySQLStatementInterceptorManagementBean ``` @Bean public MySQLStatementInterceptorManagementBean mySQLStatementInterceptorManag...
CodeSheep 发布于 3周前 阅读 2191 评论 3 点赞 6

在MySQL中使用explain查询SQL的执行计划

1、什么是MySQL执行计划        要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。         MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的。 应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的。 逻辑层,主要负责查询处理、事务管理等其他数据库功能处理,以查询为例。         首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第一步查询处理器会对SQL查询进行优化,优化后会生成执行计划,然后交由计划执行器来执行。         计划执行器需要访问更底层的事务管理器,存储管理器来操作数据,他们各自的分工各有不同,最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。 物理层,实际物理磁盘上存储的文件,主要有分文数据文件,日志文件。    通过上面的描述,生成执行计划是执行一条SQL必不可少的步骤,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方面我们进行查看以及为...
Oo若离oO 发布于 3周前 阅读 1713 评论 2 点赞 5
顶部