开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

iOS开发之 Method Swizzling 深入浅出

iOS开发之 Method Swizzling 深入浅出 ======= > 只要善用Google,网上有很多关于`Method Swizzling`的Demo,在这里我就不打算贴代码了,主要介绍下概念,原理,注意事项等等。 ## 开发需求 如果产品经理突然说:"在所有页面添加统计功能,也就是用户进入这个页面就统计一次"。我们会想到下面的一些方法: - 手动添加 直接简单粗暴的在每个控制器中加入统计,复制、粘贴、复制、粘贴... 上面这种方法太Low了,消耗时间而且以后非常难以维护,会让后面的开发人员骂死的。 - 继承 我们可以使用继承的方式来解决这个问题。创建一个基类,在这个基类中添加统计方法,其他类都继承自这个基类。 然而,这种方式修改还是很大,而且定制性很差。以后有新人加入之后,都要嘱咐其继承自这个基类,所以这种方式并不可取。 - `Category` 我们可以为`UIViewController`建一个`Category`,然后在所有控制器中引入这个`Category`。当然我们也可以添加一个`PCH`文件,然后将这个`Category`添加到`PCH`文件中。 - `Method Swizzling` 我们可以使用苹果的“黑魔法”`Method Swizzling`,`Method Swizzling`本质上就是对`IMP`和`SEL`进行交换。 ## 先了解几个概念 ### Selectors, Methods, & Im...
liman123 发布于 12小时前 阅读 21

spring-cloud集成zookeeper

spring-cloud-starter-zookeeper-config
jack_peng 发布于 13小时前 阅读 60

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

阿里架构师带你深入浅出jvm

本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine) + 运行时数据区域(runtime data area) 下面这幅图展示了一个典型的JVM(符合JVM Specification Java SE 7 Edition)所具备的关键内部组件。 组件中的多线程处理 多线程处理”或“自由线程处理”指的是一个程序同时执行多个操作线程的能力。 作为多线程应用程序的一个示例,某个程序在一个线程上接收用户输入,在另一个线程上执行多种复杂的计算,并在第三个线程上更新数据库。 在单线程应用程序中,用户可能会花费时间等待计算或数据库更新完成。 而在多线程应用程序中,这些进程可以在后台进行,因此不会浪费用户时间。 多线程处理可以是组件编程中的一个非常强大的工具。通过编写多线程组件,您可以创建在后台执行复杂计算的组件,它们允许用户界面 (UI) 在计算的过程中自由地响应用户输入。 虽然多线程处理是一个强大的工具,但是要将其正确应用却比较困难。 未能正确实现的多线程代码可能降低应用程序性能,或甚至导致应用程序冻结。 下列主题将向您介绍多线程编程的一些注意事项和最佳做法。.NET Framew...
James- 发布于 14小时前 阅读 116 点赞 1

福利:饿了么《分布式时序数据库 - LinDB》!

背景 饿了么对时序数据库的需求主要来自各监控系统,主要用于存储监控指标。原来使用graphite,后来慢慢有对指标有多维的需求(主要体现在对一个指标加多个Tag, 来组成Series,然后对Tag进行Filter和Group进行计算),这时graphite基本很难满足需求。 业界现在用的比较多的主要有如下几类TSDB: InfluxDB:很多公司都在用,包括饿了么有部分监控系统也是用InfluxDB。优点,支持多维和多字段,存储也根据TSDB的特点做了优化。但开源的部分不支持,很多公司自己做集群化, 但大多基于指标名来,这样会有单指的热点问题。现在饿了么也是类似的做法,但热点问题很严重,大的指标已经用了最好的服务器,但是查询性能还是不够理想, 如果做成按Series Sharding那成本还是有一点高; Graphite:根据指标写入及查询,计算函数很多,但很难支持多维,包括机房或多集群的查询,原来饿了么把业务层的监控指标存储在Graphite中,并工作的很好, 但是多活之后基本已经很难满足一些需求了,由于其存储结构的特点,很占IO,根据目前线上的数据写放大差不多几十倍以上; OpenTSDB: 基于HBase,优点存储层不用自己考虑,做好查询聚合就可以,也会存在HBase的热点问题等,在以前公司也弄基于H...
java高级架构牛人 发布于 14小时前 阅读 148 评论 1 点赞 1

纽约时报 移动团队 Objective-C 规范指南

这份规范指南概括了纽约时报 iOS 团队的代码约定。 ## 介绍 关于这个编程语言的所有规范,如果这里没有写到,那就在苹果的文档里: * [Objective-C 编程语言][Introduction_1] * [Cocoa 基本原理指南][Introduction_2] * [Cocoa 编码指南][Introduction_3] * [iOS 应用编程指南][Introduction_4] [Introduction_1]:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html [Introduction_2]:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html [Introduction_3]:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html [Introduction_4]:http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/Introduction/Introduction.html ## 点语法 应该 **始终** 使用点语法来访问或者修改属性,访问其他实例时首选括号。 **推荐:** ```objc view.backgroundColor = [UIColor orangeColor]; [UIApplication sharedApplication]....
鉴客 发布于 14小时前 阅读 39

Golang sync.Cond源码分析

cond的主要作用就是获取锁之后,wait()方法会等待一个通知,来进行下一步锁释放等操作,以此控制锁合适释放,释放频率,适用于在并发环境下goroutine的等待和通知。 针对Golang 1.9的sync.Cond,与Golang 1.10一样。 源代码位置:sync\cond.go。 结构体 type Cond struct { noCopy noCopy // noCopy可以嵌入到结构中,在第一次使用后不可复制,使用go vet作为检测使用 // 根据需求初始化不同的锁,如*Mutex 和 *RWMutex L Locker notify notifyList // 通知列表,调用Wait()方法的goroutine会被放入list中,每次唤醒,从这里取出 checker copyChecker // 复制检查,检查cond实例是否被复制 } 再来看看等待队列notifyList结构体: type notifyList struct { wait uint32 notify uint32 lock uintptr head unsafe.Pointer tail unsafe.Pointer } 函数 NewCond 相当于Cond的构造函数,用于初始化Cond。 参数为Locker实例初始化,传参数的时候必须是引用或指针,比如&sync.Mutex{}或new(sync.Mutex),不然会报异常:cannot use lock (type sync.Mutex) as type sync.Locker in argument to sync.NewCond。 大家可以想想为什么一定要是指针呢? 知道的可以给我留言回答。 func NewCond(l...
lhahhahakk 发布于 15小时前 阅读 45

使用 pixi.js 开发微信小游戏

闲来无事就又折腾起微信小游戏来,其实国内几大游戏引擎都支持一键发布到微信小游戏。但是对`pixi.js`情有独钟,所以开始进入正题。 目标:把`pixi-filters`的在线`demo`放到微信小游戏上。 首先通过微信开发工具建立一个空项目,同时引入`pixi.js`和官方提供的`weapp-adapter.js`。 在`game.js`里写入: ``` import './libs/weapp-adapter' import * as PIXI from './libs/pixi.min' const {pixelRatio, windowWidth, windowHeight} = wx.getSystemInfoSync() new PIXI.Application({ width: windowWidth * pixelRatio, height: windowHeight * pixelRatio, view: canvas }) ``` 一切正常的话,结果应该如下图。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-ca6031ec1b48f4e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在把`pixi-filters`的`demo`搬过来之前,先把之前遇到的坑填一下。 我们先在场景中添加一张图片,然后让他点击隐藏。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-9ea1cb6119c53cf5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 问题是,我们点击非但不消失,还报错了。 ...
雨里有条鱼 发布于 15小时前 阅读 85 评论 2

总结!Java8 增强的Future:CompletableFuture

github地址:https://gitee.com/zhangzeli/projects
张泽立 发布于 15小时前 阅读 81

Mycat分表分库:从零开始

Mycat 是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的Server,用于分表分库的中间价。
Kelin92 发布于 16小时前 阅读 89

基于Spring Boot构建Spring Cloud微服务架构

一、Spring Cloud简介: Spring Cloud是对Netflix的多个开源组件进一步的封装而成,同时又实现了和云端平台,和SpringBoot开发框架很好的集成。 Spring Cloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全居琐,leader选举,分布式session,集群状态)中快速构建的工具,使用SpringCloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。 二、创建服务端 参考Spring Inuti搭建Spring Boot项目 搭建基础Boot项目 在pom.xml中添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> 在Application启动文件中添加注解:@EnableEurekaServer @EnableEurekaServer @SpringBootApplication public class...
权律二啊- 发布于 16小时前 阅读 108

Golang sync.Cond源码分析

cond的主要作用就是获取锁之后,wait()方法会等待一个通知,来进行下一步锁释放等操作,以此控制锁合适释放,释放频率,适用于在并发环境下goroutine的等待和通知。 针对Golang 1.9的sync.Cond,与Golang 1.10一样。 源代码位置:sync\cond.go。 ## 结构体 ```go type Cond struct { noCopy noCopy // noCopy可以嵌入到结构中,在第一次使用后不可复制,使用go vet作为检测使用 // 根据需求初始化不同的锁,如*Mutex 和 *RWMutex L Locker notify notifyList // 通知列表,调用Wait()方法的goroutine会被放入list中,每次唤醒,从这里取出 checker copyChecker // 复制检查,检查cond实例是否被复制 } ``` 再来看看等待队列`notifyList`结构体: ```go type notifyList struct { wait uint32 notify uint32 lock uintptr head unsafe.Pointer tail unsafe.Pointer } ``` ## 函数 ### NewCond 相当于`Cond`的构造函数,用于初始化`Cond`。 参数为Locker实例初始化,传参数的时候必须是引用或指针,比如&sync.Mutex{}或new(sync.Mutex),不然会报异常:`cannot use lock (type sync.Mutex) as type sync.Locker in argument to sync.NewCond`。 大家可以想想为什么一定要是指针呢? 知...
梦朝思夕 发布于 17小时前 阅读 58

前端 优化反应: 虚拟dom解释

了解反应的虚拟dom,并使用此知识加快应用程序。在这个全面入门的框架内部入门中,我们将揭开JSX的神秘化,让您展示如何做出反应,解释如何找到瓶颈,并分享一些避免常见错误的提示。 反应的原因之一一直动摇着前端世界,并没有下降的迹象,它平易近人的学习曲线:在你绕着头后,学习曲线。n.JSX还有整个“国家vs.道具“概念,你可以走了。 如果你已经熟悉了反应工作的方式,你可以直接跳到“修理东西”. 但是要真正掌握自己的反应,你需要思考反应。这篇文章是想帮你解决这个问题。看看所做的反应表我们的项目之一: 一个巨大的反应表ebay业务. 使用数百条动态的、多层的行,理解框架的细点对于保证用户体验的顺利进行至关重要。 当事情发生的时候你肯定会感觉到。输入字段会得到laggy,复选框会先检查一下,情态动词会出现困难的时候。 为了解决这些问题,我们需要覆盖整个旅程,一个反应组件从定义到您定义(然后更新)页面上。系好安全带! 在JSX后面 过程中已知的前端圈为“transpiling”,即使“编译”将是一个更正确的术语。 反应开发人员敦促您在编写组件时使用名为JSX的html和javascript组合。然而,浏览器对于JSX及其语法没有任何线索。浏览器只理解简单javascript,...
落叶_dfg 发布于 1天前 阅读 41

SpringBoot+Docker+Git+Jenkins实现简易的持续集成和持续部署

努力了这么久,但凡有点儿天赋,也该有些成功的迹象了。
郑龙飞 发布于 2天前 阅读 827 评论 5 点赞 1

ArangoDB 的使用 -- 安装和配置

  ArangoDB 是一个开源的分布式原生多模型数据库,是兼有图 (graph)、文档 (document)和键/值对 (key/value) 三种数据模型的 NoSQL 数据库。ArangoDB 使用类SQL的查询语言(AQL)构建出高性能应用程序。 ArangoDB 的安装 ArangoDB 支持Windows、Linux、Dcoker、Mac 等多种系统的安装。 Windows 下 ArangoDB 的安装 Windows 下可以下载压缩包版,也可以下载可执行文件版。我比较喜欢使用压缩包版,下载后选择一个目录直接解压就可以了。解压后的目录结构大致包括: etc:所有的配置文件在该目录下 usr:包括数据库的执行文件,js 的模块类库 var:数据目录和FOXX 程序目录 启动文件在 usr/bin/ 目录下,启动时打开一个终端,切换到该目录下,执行启动文件,或在也可以做成 windows 的服务。   Linux 下 ArangoDB 的安装 本文是以 CentOS 7 为例,其他 Linux 发行版依照官方给的提示操作即可。 使用 root 的权限执行以下命令: cd /etc/yum.repos.d/ curl -OL https://download.arangodb.com/arangodb33/CentOS_7/arangodb.repo yum -y install arangodb3-3.3.7 yum -y install arangodb3-debuginfo-3.3.7(默认情况下不是必须的) 安装成功后,仔细查看一下终端的输出信息...
电工之心 发布于 2天前 阅读 158

微服务开发中的数据架构设计

本文来自作者 陈伟荣 在 GitChat 分享的文章【微服务开发中的数据架构设计】 前言 微服务是当前非常流行的技术框架,通过服务的小型化、原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合、业务的灵活调整组合以及系统的高可用性。为业务创新和业务持续提供了一个良好的基础平台。本文分享在这种技术架构下的数据架构的设计思想以及设计要点,本文包括下面若干内容。 微服务技术框架中的多层数据架构设计 数据架构设计中的要点 要点1:数据易用性 要点2:主、副数据及数据解耦 要点3:分库分表 要点4:多源数据适配 要点5:多源数据缓存 要点6:数据集市 为了容易理解,本文用一个简化的销售模型来阐述,如下图。图1显示了客户、卖家、商品、定价、订单的关系(这里省略支付、物流等其他元素)。 图1 销售模型 在这个销售模型中,卖家提供商品、制定价格,客户选择产品购买、形成销售订单。根据微服务的理念设计,可以划分为客户服务、卖家服务、商品服务、定价服务、订单服务,以及公共服务(比如认证、权限、通知等),如图2所示。 图2 微服务功能 微服务架构中的多层数据架构设计 分布式架构一般把系统分为 Saas(Software-as-a-Service)、Paas(P...
Java架构资源分享 发布于 2天前 阅读 328 点赞 3

基于Rancher+阿里云Code构建的DevOps自动化部署

(一)Rancher的应用及优点简介 放个图吧,经过我自己试用,Rancher确实要比原生的k8s要方便许多 整个Rancher的搭建流程大概最多就在2个小时左右,非常方便快捷 (二)Rancher的安装和使用 1、环境选择 安装Rancher环境,一定要在干净的linux主机上进行,避免出现因配置导致的莫名其妙的问题。服务器操作系统建议CentOS7.4(内核3.10以上),低于这个版本的系统 如7.3 7.2会报一个小bug,不过倒不影响使用,再低内核的版本就不要用了,很多都不支持。 生产环境建议采用阿里云 Rancher(1C 2G以上的配置,若要保证运行稳定,建议配置至少2C 4G),宿主机(1C 2G以上的配置)、弹性公网EIP+ 专有网络测试,私有环境建议采用Rancher(1C 2G以上的配置),宿主机(1C 2G以上的配置)、 虚拟机(Hyper-V、VMware)+ 同一内网可通讯Rancher 1.6.12 ,调度引擎选择Cattle。Rancher2.0调度引擎默认使用K8s,当前还是测试版,官方不建议在生产环境使用。 2、环境配置 3、安装Docker 3.1 安装 Docker17.06 CE curl https://releases.rancher.com/install-docker/17.06.sh | sh 这里不建议安装最新的docker19版本,因为rancher目前官方最高只支持docker 17.06 版本,包括虚拟机也一样,...
JacCoffee 发布于 2天前 阅读 153 评论 4

web3.js中estimateGas如何计算智能合约消耗的gas量

我们可使用web3.js框架的estimateGas函数获得一个以太坊智能合约的Gas估计值 ,通过执行一个消息调用或交易,该消息调用或交易直接在节点的VM中执行,并未在区块链中确认,函数会返回估算使用的gas量。 函数调用: web3.eth.estimateGas(callObject [, callback]) 参数: 在 web3.eth.sendTransaction 中, 参数大都是可选的。 1. Object - 要发送的交易对象: from: String - 用来传送的账户地址. 默认使用web3.eth.defaultAccount属性。 to: String - (可选) 目标地址,对于创建合同的交易没有定义。 value: Number|String|BigNumber - (可选) 为交易转移的价值以Wei为单位,如果是合同创建交易,也是基金。 gas: Number|String|BigNumber - (可选, 默认: 待定) 用于交易的gas量(未使用的gas已退还)。 gasPrice: Number|String|BigNumber - (可选, 默认: 待定) 此交易的gas价格以wei为单位,默认为平均网络gas价格。 data: String - (可选) Either 包含消息关联数据的字节字符串,或者创建合同事务的初始化代码。 nonce: Number - (可选)一个随机数的整数。 这允许覆盖使用相同随机数的您自己的未决事务。 2.Function - (optional)如果传递回调,则HTT...
笔阁 发布于 2天前 阅读 76 点赞 1

前后端对接的思考及总结

# 前后端对接的思考及总结 ## 说在前面的话 随着前端NodeJs技术的火爆,现在的前端已经非以前传统意义上的前端了,各种前端框架(Vue、React、Angular......)井喷式发展,配合NodeJs服务端渲染引擎,目前前端能完成的工作不仅仅局限于CSS,JS等方面,很多系统的业务逻辑都可以放在前端来完成,例如我司的**管控** 那可能有些人会说,前端这么火,NodeJs发展这么迅猛,后端是不是以后都没事情干了,其实不然,拿Java来说,经过这么多年发展,已经相当稳定,完善的生态圈也非最近今年发展起来的NodeJs可比,我们常常说**闻道有先后,术业有专攻**,用在这里最合适不过了,**集群**、**分布式**、**高可用**等等技术还是需要后端架构师来思考的事情 目前前端同后端的合作方式是前后端分离,通过Nginx+Tomcat的组合部署(还可加nodejs中间件)方式能有效的进行解耦,并且前后端分离为项目以后的架构扩展、微服务化、组件化都打下重要基础,所以这在以后是一个发展的必然趋势,我们需要去适应,做出改变!!! ## 早期的开发方式 早期的开发方式如下图: ![输入图片说明](https://static.oschina.net/uploads/img/201804/22110916_716x.png "在这里输入图片标题") 这也是我前面工作1-3年的开发方式...
八一菜刀 发布于 2天前 阅读 307

2个小bug,有点小门道

这是之前解决的2个小bug,在此记录下。
温安适 发布于 2天前 阅读 474 评论 6 点赞 6

Android工程模块化平台设计-讲稿

这篇文章是我在 2018【[携程技术沙龙移动技术专场](https://mp.weixin.qq.com/s/B3eWQmgUZYFeGPs4DWo8gw)】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 发布在【[开源中国博客](https://my.oschina.net/kymjs)】,希望能给买不到票参加大会的朋友带来帮助。 ![Android 模块化](https://kymjs.com/qiniu/images/blog_image/napos-modular.001.jpeg) 大家好,今天跟大家分享的主题是《Android工程模块化平台的设计》 ![Android 模块化](https://kymjs.com/qiniu/images/blog_image/napos-modular.002.jpeg) 首先自我介绍一下:我叫张涛,目前就职于饿了么移动技术部。可能有些朋友认识我,我之前也会在我博客【[开源实验室](https://kymjs.com)】写一些Android相关的技术点,如果对今天讲的模块化设计,你觉得有什么问题或者可以深入探讨的,也欢迎加我微信`kymjs123`详聊。 ![Android 模块化](https://kymjs.com/qiniu/images/blog_image/napos-modular.003.jpeg) 今天我们讲的主题是基于项目模块化来说的,模块化是什么大家肯定都是知道了的,这里问一下大家,有多少人在此之前有做过模块化的,举个手我看一下;了解过听说过模块化的呢?这次比较多。 我们...
kymjs张涛 发布于 2天前 阅读 107 点赞 1

CentOs7 安装docker

1. 系统要求 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。 2. 卸载旧版本 旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本: $ sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine 3. 使用 yum源安装 执行以下命令安装依赖包: $ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 执行下面的命令添加 yum 软件源: $ sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo # 官方源 # $ sudo yum-config-manager \ # --add-repo \ # https://download.docker.com/linux/centos/docker-ce.repo 如果需要最新版本的 Docker CE 请使用以下命令: $ sudo yum-config-manager --enable docker-ce-edge 如果需要测试版本的 Docker CE ...
紫川帝林 发布于 7小时前 阅读 5

Java技术——你真的了解String类的intern()方法吗

0.引言 什么都先不说,先看下面这个引入的例子: String str1 = new String("SEU")+ new String("Calvin");     System.out.println(str1.intern() == str1);  System.out.println(str1 == "SEUCalvin");   本人JDK版本1.8,输出结果为: true   true   再将上面的例子加上一行代码: String str2 = "SEUCalvin";//新加的一行代码,其余不变   String str1 = new String("SEU")+ new String("Calvin");       System.out.println(str1.intern() == str1);    System.out.println(str1 == "SEUCalvin");    再运行,结果为: false   false   是不是感觉莫名其妙,新定义的str2好像和str1没有半毛钱的关系,怎么会影响到有关str1的输出结果呢?其实这都是intern()方法搞的鬼!看完这篇文章,你就会明白。o(∩_∩)o  说实话我本来想总结一篇Android内存泄漏的文章的,查阅了很多资料,发现不得不从Java的OOM讲起,讲Java的OOM又不得不讲Java的虚拟机架构。如果不了解JVM的同学可以查看此篇 JVM——Java虚拟机架构。(这篇文章已经被我修改过N多次了,个人感觉还是挺全面清晰的,每次看都会有新的理解。) 在JVM架构一文中也有介绍,...
码代码的小司机 发布于 8小时前 阅读 4

长连接和端连接和心跳包机制

TCP连接简介 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立是需要三次握手的,而释放则需要4次握手, 所以说每个连接的建立都是需要资源消耗和时间消耗的 ​经典的三次握手示意图:​ ​ ​ ​ 经典的四次握手关闭图:   ​ 一、长连接与短连接 长连接: 指在一个TCP连接上可以连续发送多个数据包,         在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接;         一般需要自己做在线维持。  短连接: 指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接;         一般银行都使用短连接。          它的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段  比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。  其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。 长连接与短连接的操作过程  通常的短连接操作步骤是:    连接→数据传输→关闭连接; 而长连接通...
nardoo 发布于 2个月前 阅读 66

知识点③:Spring Boot 中的 druid 配置及使用

该篇主要记录 druid 在 Spring Boot 中的 配置、单数据源、多数据源及动态数据源的使用
s6 发布于 1个月前 阅读 341 评论 2

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件

8.6 管道符和作业控制 管道符的作用在于将符号前面的结果丢给符号后面的命令。管道符后面并不是所有的命令都可以,一般针对文档操作的命令比较常用,eg:cat、less、head、tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等等。 作业控制 Ctrl+z 暂停一个正在执行的任务 jobs 查看在后台运行的任务 bg[id] =background把任务调到后台运行 fg[id] =foreground把任务调到前台运行 “&” 命令后面加&相当于直接把任务调到后台运行 8.7-8.8 shell变量 env命令:查看系统内置环境变量 [root@cham2 ~]# env XDG_SESSION_ID=3 HOSTNAME=cham2 TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.230.1 59299 22 SSH_TTY=/dev/pts/1 USER=root LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz...
Champin 发布于 7小时前 阅读 3

IntelliJ IDEA Tomcat配置 详解

转载自: IntelliJ IDEA Tomcat配置 详解 1> 进入 Edit Configurations   2> 点击 + ,选择 Tomcat 服务器,如果是本地Tomcat 选择 Local   3> Tomcat Server -> Unnamed -> Server -> Application server 的 Configuration ,找到本地 Tomcat 服务器,再点击 OK按钮     4>  1 所示,我们可以切换随时为项目切换不同的容器   2 所示,我们可以指定给运行的容器设置 VM 参数   3 所示,这分别是在两种命令下的触发的事件。这个是 IntelliJ IDEA 特有的,也是重点 On Update action 当我们按 Ctrl + F10 进行容器更新的时候,可以根据我们配置的这个事件内容进行容器更新。其中我选择的 Update classes and resources 事件是最常用的,表示我们在按 Ctrl + F10 进行容器更新的时候,我们触发更新编译的类和资源文件到容器中。在 Debug 模式下,这个也就是所谓的 HotSwap。这是这种热部署没有 JRebel 插件那样好用 On frame deactivation 当我们切换 IntelliJ IDEA 到浏览器的时候进行指定事件更新,这个一般是因为 Web 开发的时候,我们需要经常在 IntelliJ IDEA 和各个浏览器之间来回切换测试,所以才有了这种需求。IntelliJ IDEA 是为了帮我们在做这种无聊切换的时...
为了美好的明天 发布于 3周前 阅读 21

java8(3) sorted的使用

这先上例子,然后总结。
这些年了1990 发布于 3个月前 阅读 49

Idea 常用快捷键整理

其实我主要是为了找到快速回到文件的开头和结尾,ctrl+home/end
一只努力的码农 发布于 2个月前 阅读 25

Hibernate级联更新有新加入数据,更新失败

Batch update returned unexpected row count from update [1]; actual row count: 0; expected: 1
我可能是个傻子 发布于 4周前 阅读 13

详解redis sentinel(哨兵模式)的原理和机制

三个定时任务 sentinel在内部有3个定时任务 1.每10秒每个sentinel会对master和slave执行info命令 这个任务达到两个目的: 1.发现slave节点 2.确认主从关系 2.每2秒每个sentinel通过master节点的channel交换信息(pub/sub) master节点上有一个发布订阅的频道(__sentinel__:hello)。 sentinel节点通过__sentinel__:hello频道进行信息交换(对节点的"看法"和自身的信息),达成共识。 3.每1秒每个sentinel对其他sentinel和redis节点执行ping操作(相互监控) 这个其实是一个心跳检测,是失败判定的依据。 主观下线和客观下线 在redis-sentinel的conf文件里有这么两个配置: 1.sentinel monitor <masterName> <ip> <port> <quorum> 四个参数含义: masterName这个是对某个master+slave组合的一个区分标识(一套sentinel是可以监听多套master+slave这样的组合的)。 ip 和 port 就是master节点的 ip 和 端口号。 quorum这个参数是进行客观下线的一个依据,意思是至少有 quorum 个sentinel主观的认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master并没有出现故障,所以这就需要...
吴正宇 发布于 3周前 阅读 31

旅行的青蛙ios正版无限四叶草教程,正版!正版!App Store下载的那种

废话不多说,先上图 App Store下载正版旅行的青蛙 appstore下载的正版 覆盖存档教程: 1、存档下载地址在教程最后 2、需要用到软件iMazing:https://3.xp510.com/xp2011/iMazing.xp510.com.rar 3、usb线连接电脑 安装好iMazing打开:点击管理应用程序   打开后看图文教程 点击 恢复应用程序数据 后 点击 选择 选择存档后点击完成即可,会自动重启app 存档用itools制作,源自于网上破解中文版app,在此说声感谢。 首发oschina 转载到吾爱破解。 存档下载地址:链接:https://pan.baidu.com/s/1pMPOmAR 密码:vnqf 打一波广告,本人开源项目:lenos(p为spring boot版本扩展名)一款快速开发模块化脚手架,采用spring boot+spring+SpringMvc+mybatis++activiti+shiro+swagger+ehcache+quartz+freemarker+layui技术开发;实现功能有系统模块:菜单管理、用户管理、角色管理,系统监控:系统日志、接口api、sql监控、可配置化定时任务。本项目会一直维护并集成新的技术,给您的开发节约时间成本。项目地址:http://gitee.com/bweird/lenosp...
一枚码农 发布于 3个月前 阅读 338

Python标准库笔记(6) — struct模块

该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换。这可以用于处理存储在文件中或从网络连接中存储的二进制数据,以及其他数据源。
j_hao104 发布于 2个月前 阅读 97

LinkedList线程不安全处理

在多线程中,如果要并发的修改一个数据结构,那么很有可能会破坏这个数据结构。例如,一个线程可能要向一个散列表中插入一个元素,假如在调整各个桶之间的链接关系时被剥夺了控制权,而此时正好有另外一个线程正在遍历链表,则可能会产生异常或者死循环。 可以通过锁来保护共享的数据结构,但是选择线程安全的实现作为替代可能更容易一些。
一只努力的码农 发布于 1个月前 阅读 24

Spring之IOC容器实现

Spring IOC
Izecson 发布于 6小时前 阅读 2

dubbo请求处理线程模型实现分析

问题的由来: 如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识, 则直接在 IO 线程上处理更快,因为减少了线程池调度。 但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到 线程池,否则 IO 线程阻塞,将导致不能接收其它请求。 如果用 IO 线程处理事件,又在事件处理过程中发起新的 IO 请求,比如在连接事件中发起登 录请求,会报“可能引发死锁”异常,但不会真死锁。 因此,需要通过不同的派发策略和不同的线程池配置的组合来应对不同的场景。 这里说的IO线程(以netty为例)是netty启动服务时指定的boss/worker执行器中的woker线程。 具体配置方式如下两种: <dubbo:provider dispatcher="xxx" /> 或者 <dubbo:protocol name="dubbo" dispatcher="xxx" /> 目前dubbo提供的Dispatcher扩展实现有如下5种实现,默认派发方式是all all=com.alibaba.dubbo.remoting.transport.dispatcher.all.AllDispatcher direct=com.alibaba.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher message=com.alibaba.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher execution=com.al...
wannshan 发布于 4周前 阅读 38

Docker的iptables配置

Docke
玛雅牛 发布于 2小时前 阅读 2

spring事务的传播属性

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 表1事务传播行为类型 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。spring默认使用此传播类型 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制 Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(...
一只努力的码农 发布于 2个月前 阅读 14

芝麻HTTP: python version 2. required,which was not found in the registry 解决方案

不能在注册表中识别python2.7 新建一个register.py 文件 import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.prefix regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version) installkey = "InstallPath" pythonkey = "PythonPath" pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % ( installpath, installpath, installpath ) def RegisterPy(): try: reg = OpenKey(HKEY_CURRENT_USER, regpath) except EnvironmentError as e: try: reg = CreateKey(HKEY_CURRENT_USER, regpath) SetValue(reg, installkey, REG_SZ, installpath) SetValue(reg, pythonkey, REG_SZ, pythonpath) CloseKey(reg) except: print "*** Unable to register!" return print "--- Python", version, "is now registered!" return if (QueryValue(reg, installkey) == installpath and QueryValue(reg, pythonkey) == pythonpath): CloseKey(reg) print "=== Python", ver...
芝麻软件 发布于 3个月前 阅读 18

php 生成图片验证码 laravel

php 使用composer获取图片验证码库,生成图片验证码
请叫我足下 发布于 2个月前 阅读 48

iOS冒泡排序

冒泡排序算法顾名思义,经过每一次排序算法之后,最大的泡泡(数)会飘到最上面,第二次排序之后,第二大的泡泡(数)飘到倒数第二的位置 ..... 以此类推,直至完成从小到大的排序。 冒泡排序原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 用图片表示冒泡排序的过程更直观: 依照冒泡排序的概念可以方便的写出排序的实现: - (void)bubbleSort:(NSMutableArray *)arr { int count = 0; int cycleCount = 0; for (int i = 0; i<arr.count-1; i++) { cycleCount += 1; // 每次循环都不需要比较最后一个,倒数第二个,倒数第三个... 所以二层循环最好减去已经排好序的数 for (int j = 0; j<arr.count-i-1; j++) { cycleCount += 1; if ([arr[j] integerValue] > [arr[j+1] integerValue]) { NSInteger temp = [arr[j] integerValue]; ...
zh_iOS 发布于 3个月前 阅读 22

天了噜,Java 8 要停止维护了!

前些天的中兴事件,已经让国人意识到自己核心技术的不足,这次的 JDK 8 对企业停止免费更新更是雪上加霜。。 以下是 Oracle 官网提示的 JDK8 终止更新公告。 ![image](http://upload-images.jianshu.io/upload_images/5954965-6b071671115f961d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) > 原文内容:Oracle will not post further updates of Java SE 8 to its public download sites for commercial use after January 2019\. Customers who need continued access to critical bug fixes and security fixes as well as general maintenance for Java SE 8 or previous versions can get long term support through Oracle Java SE Advanced, Oracle Java SE Advanced Desktop, or Oracle Java SE Suite. For more information, and details on how to receive longer term support for Oracle JDK 8, please see the Oracle **翻译** 2019年1月之后,Oracle将不会在其网站上发布Java SE 8商业使用的进一步更新下载。那些需要持续获取安全的bug修复和安全补丁以及Java SE 8或以前版本的稳定性支持可以通过Oracle Java SE高级版,Oracle Java SE高级桌面...
Java技术栈 发布于 2天前 阅读 3866 评论 22

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

Docker容器可视化监控中心搭建

一个宿主机上可以运行多个容器化应用,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息,而且这些信息随时间变化,我们称其为时序数据
hansonwang 发布于 1周前 阅读 3029 评论 7 点赞 4

《红海行动》百度云[完整高清720pBD]百度云网盘资源分享

《红海行动》大电影是根据也门撤侨拍的。从2015年3月29日开始的撤侨行动,海军第19批护航编队临沂舰、潍坊舰和微山湖舰,10天内转战3国4港1岛,5次赴也门安全撤离中外公民共计897人,彰显了负责任大国的能力与担当。 关注微·信·公·眾·號【 小石剧场 】进入·影院·顶部·搜索·片名·即可·观看 也门撤侨行动,是中国第一次使用武装军舰从外国撤侨,并且有武装人员携带武器离舰登岸,展开警戒,设立安全区。这是一个里程碑,标志着中国海军走向全球作战的开端。外交官亲历也门撤侨,对中国海军陆战队高度赞扬:没有孤胆英雄,但那个春天,中国军舰就是“诺亚方舟”。 我国被熟知的特种战队有雪豹突击队、猎鹰突击队等,这些是陆战的。海军特战队有个突击队,叫“蛟龙”。这蛟龙战队都是特种兵中的精英中的精英,正如人们说的海上蛟龙,陆地猛虎,空中雄鹰,反恐精英。在撤侨行动中,他们一个个犹如一把利剑,身手了得,在异国他乡的种种困难危险中,总有办法,总能坚持…… 在“守护”版全阵容海报中,蛟龙小队成员不仅悉数携装备重装登场,战地记者夏楠、军舰舰长高云和首度得以在大银幕上与观众全方位见面的海军现役军舰也全员到齐:战地记者夏楠眼神坚毅不屈;舰长高...
隔壁硬汉 发布于 5天前 阅读 2894 点赞 1

春季新增开源项目:可以斗图的 Markdown 编辑器,了解一下?

转眼间,春风又绿江南岸,2018 年悄然过去了四分之一,开发者的热情也似乎正在被回暖的天气点燃。2、3月份,开源中国社区总共收录了近 400 个项目。弱水三千取一瓢,我们从每月新增的开源项目挑选了几个和大家一起分享。
编辑部的故事 发布于 2周前 阅读 9045 评论 9 点赞 10

唐人街探案2百度云资源完整无删「bd1024p/1080p/Mp4中字」云网盘下载

关注微·信·公·众·号【 蚂蚁影迷 】进入·影院·点击《阅读原文》搜索·片名  即可看 小萝莉纯正的英式口音,怀疑在看英剧了 片中的唐仁与秦风,一个是混迹江湖的末流小侦探,一个是中国刑警学院的在校生也是crime master(全球推理侦探的专属社区App)排名第二的侦探高手。这对曾经破获曼谷黄金失窃杀人案的表舅外甥二人组,从外形到内在,被二次元美少女打扮的天才黑客侦探KIKO称之为“天使与恶魔”、“天才与白痴”,确实是再恰当不过了。二人平分500万,各得二百五的段子堪称冷幽默经典。唐仁被纽约黑帮硬汉献花共舞《粉红色的回忆》不知道算不算是王宝强搞笑角色里的巅峰剧情了。 老戏骨听不得烂英语,直接喊“shut up”了 又一位老戏骨,亦正亦邪 秦风在剧情里,仍然是将最强大脑发挥到了极致,把零碎的犯罪资料还有现实世界里的高楼大厦、街道桥梁,地理坐标都被模型化存入大脑,层层推演、排除、计算,归纳,最终还原犯罪真相,破得大案。能够把最强大脑推理的过程用视觉特效表现出来,算是影片的一大亮点。片中的唐仁继续插科打诨,关键时刻却总能画龙点睛,让秦风的推理逻辑跨越障碍,接近真相。 《猛龙过江》与《唐探2》在New York胜利会师 这回许三多算是彻...
绿豆苗 发布于 17小时前 阅读 634

“大话架构”阿里架构师分享的Java程序员需要突破的技术要点

一、源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂。 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。 我认为是阅读源码的最核心驱动力。我见到绝大多数程序员,对学习的态度,基本上就是这几个层次(很偏激哦): 1、只关注项目本身,不懂就baidu一下。 2、除了做好项目,还会阅读和项目有关的技术书籍,看wikipedia。 3、除了阅读和项目相关的书外,还会阅读IT行业的书,比如学Java时,还会去了解函数语言,如LISP。 4、找一些开源项目看看,大量试用第三方框架,还会写写demo。 5、阅读基础框架、J2EE规范、Debug服务器内核。 大多数程序都是第1种,到第5种不光需要浓厚的兴趣,还需要勇气:我能读懂吗?其实,你能够读懂的 耐心,真的很重要。因为你极少看到阅读源码的指导性文章或书籍,也没有人要求或建议你读。你读的过程中经常会卡住,而一卡主可能就陷进了迷宫。这时,你需要做的,可能是暂时中断一下,再从外围看看它:如API结构、框架的设计图。 下图是我总结出目前最应该学习的源码知识点: 二、分布式架构 分布式系统是一个古老而宽泛的话题,而近几年因为 “大数据” 概念的兴起,...
权律二啊- 发布于 1周前 阅读 846 评论 4 点赞 2

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周前 阅读 5117

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 发布于 2个月前 阅读 22935

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周前 阅读 3314

Java中的OneToMany

### 写在开头 ``` 使用jhipster声明的OneToMany在One的一方DTO中是没有与Many的DTO的映射关系的, 为了在One的一方DTO中使用Many的DTO, 使用以下三步解决此问题。 ``` ### 步骤 ``` 1. OneDTO 中的"mark 1"处为自己写的一对多的关系, 此处变量名称不能与实体One中相应的变量名称一致,否则编译失败。 2. OneMapper 中的"mark 2"处 uses属性添加ManyMapper。 2. OneMapper 中的"mark 3"处使用@Mapping注解声明 Entity 转 DTO 的映射关系。 ``` ### Entity ``` @Entity @Table(name = "one") public class One { ... @OneToMany(mappedBy = "one") private Set manys = new HashSet<>(); ... public void setManys(Set manys) { this.manys = manys; } public Set getManys() { return manys; } } @Entity @Table(name = "many") public class Many { ... @ManyToOne private One one; } ``` ### DTO ``` public class OneDTO { ... // mark 1 private Set manyDTOS = new HashSet<>(); ... public void setManyDTOS(Set manyDTOS) { this.manyDTOS = manyDTOS; } public Set getManyDTOS() { return manyDTOS; } } public class ManyDTO { ... private Long oneId; ... public...
tianshl 发布于 3个月前 阅读 34073

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 发布于 1个月前 阅读 13557

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 发布于 1个月前 阅读 14836

头号玩家百度云网盘1080P中文字幕网盘下载

头号玩家免费子线观看
隔壁硬汉 发布于 2天前 阅读 3224

深入理解 Java 多线程核心知识:跳槽面试必备

多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。 本文从基础概念开始到最后的并发模型由浅入深,讲解下线程方面的知识。 概念梳理 本节我将带大家了解多线程中几大基础概念。 并发与并行 并行,表示两个线程同时做事情。 并发,表示一会做这个事情,一会做另一个事情,存在着调度。单核 CPU 不可能存在并行(微观上)。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。 阻塞与非阻塞 阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。 此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。阻塞是指线程在操作系统层面被挂起。阻塞一般性能不好,需大约8万个时钟周期来做调度。 非阻塞则允许多个线程...
Java工程师-Distance 发布于 1周前 阅读 1247 评论 2 点赞 4

你离BAT之间,只差这一套Java面试题

最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目。这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题。关于中高级的程序员问题,我后面可能再出一篇文章。 对于一个初中级程序员来说,面试问题不仅仅涉及到Java语言,还会包括很多其他知识,比如计算机基础知识(数据结构、计算机网络、操作系统等)、C语言基础、Java底层知识以及一些框架相关知识等。本文几乎覆盖到了所有领域。 计算机基础知识 C语言基础 Java基础 Java高级 Java Web 设计模式 知识的综合能力 工具使用 项目相关 技术热情 表达能力 思考方式 其他 推荐阅读 还有,我知道很多人会问关于这些题目的答案问题。答案我都有,由于篇幅有限没办法直接贴上来。这些题目的答案我会在我的公众号及知识星球中给出,感谢关注。 为了方便,我把他们分了类,有一些是必看的,我用!标注,有一些进阶型的我用%标注,有一些需要了解的,我用?标注。 必会关键字 void byte int long char short float double String StringBuffer StringBuilder Array CollectionCollections List ArrayList LinkedList Vector Set HashMap TreeMap L...
Java工程师-Distance 发布于 5天前 阅读 692 点赞 3

阿里架构师详解虚拟机工作原理

一、类加载器 首先来看一下java程序的执行过程。 从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入 [java] view plain copy javac YourClassName.java 此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码的时候,开发工具已经帮你完成了上述的编译工作,因此你可以在对应的目录下看到class文件。此时的class文件依然是保存在硬盘中,因此,当你在命令行中运行 [java] view plain copy java YourClassName 就完成了上面红色方框中的工作。JRE的来加载器从硬盘中读取class文件,载入到系统分配给JVM的内存区域--运行数据区(Runtime Data Areas). 然后执行引擎解释或者编译类文件,转化成特定CPU的机器码,CPU执行机器码,至此完成整个过程。 接下来就重点研究一下类加载器究竟为何物?又是如何工作的? 首先看一下来加载器的一些特点,有点抽象,不过总有帮助的。 》》层级结构 类加载器被组织成一种层级结构关系,也就是父子关系。其中,Bootstrap是所有类加载器的父亲。如下图所示: --Bootstrap class loader: 当运行java虚拟机时,这个类加载器被创建,它加...
权律二啊- 发布于 5天前 阅读 970 评论 9 点赞 1

Java集合总结【面试题+脑图】,将知识点一网打尽!

前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~ 回顾目录: Collection总览 List集合就这么简单【源码剖析】 Map集合、散列表、红黑树介绍 HashMap就是这么简单【源码剖析】 LinkedHashMap就这么简单【源码剖析】 TreeMap就这么简单【源码剖析】 ConcurrentHashMap基于JDK1.8源码剖析 Set集合就这么简单! Java容器可分为两大类: Collection List ArrayList LinkedList Vector(了解,已过时) Set HashSet LinkedHashSet TreeSet Map HashMap LinkedHashMap TreeMap ConcurrentHashMap Hashtable(了解,,已过时) 着重标出的那些就是我们用得最多的容器。 其实,我也不知道要怎么总结好,因为之前写每一篇的时候都总结过了。现在又把他们重新罗列出来好像有点水,所以,我决定去回答一些Java容器的面试题! 当然了,我的答案未必就是正确的。如果有错误的地方大家多多包含,希望不吝在评论区留言指正~~ 一、ArrayList和Vector的区别 共同点: 这两个类都实现了List接口,它们都是有序的集合(存储有序),底层是数组。我们可以按位置索引号取出某个元素,允许元素重复和为null。 区别...
Java3y 发布于 1周前 阅读 857 点赞 1

阿里架构师的日志:带你快速理解微服务架构,理解微服务架构的核心

什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。 传统的WEB应用核心分为业务逻辑、适配器以及API或通过UI访问的WEB界面。业务逻辑定义业务流程、业务规则以及领域实体。适配器包括数据库访问组件、消息组件以及访问接口等。一个打车软件的架构图如下: 尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用。例如Java应用程序会被打包成WAR,部署在Tomcat或者Jetty上。 这种单体应用比较适合于小项目,优点是: 开发简单直接,集中式管理 基本不会重复开发 功能都在本地,没有分布式的管理开销和调用开销 当然它的缺点也十分明显,特别对于互联网公司来说: 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断 代码维护难:代码功能耦合在一起,新人不知道何从下手 部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长 稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉 扩展性不够:无法满足高并发情况下的业务需求 所以,现在主流的设计一般会采用微服务架构。其思路不是开发一个巨大的单体式应用,而是将应用分解为小的、互...
权律二啊- 发布于 1周前 阅读 671 评论 1

高阶爬虫实战:破解极验滑动验证码

今天给大家带来的是极验验证码的selenium破解之法,是不是有点小激动呢,小伙伴们等不及了,让我们赶紧直入主题吧。 虎X网注册 这次我们是拿虎X开刀,注册账号的时候需要滑动图片到缺口位置,这种验证码我们现在也经常遇到,这个就不用详细介绍了吧 针对这种验证码我们首先确定了使用selenium模拟滑动破解方式,selenium鼠标移动点击拖动都比较简单,那么问题就在于拖动多少距离,眼睛看起来很直观,但是程序怎么获取呢?利用图像识别……,额,这个只能想想了吧。不如看看网页源码或者请求信息,看看有没有有效的信息。 查看网页信息 鼠标右键点击到图片上,查看元素 这一瞬间的图片,还好我二十几年的麒麟臂没白练,我们看看元素查看到的都是什么东西 这看起来有点奇怪哦,有个图片链接,还有位置信息,而且还那么多,先把图片链接拷贝到浏览器里访问下看看 WTF,这是什么鬼?注意到那个像猪尾巴一样的6了吗?还有那个小箭头,跟上面完整图片对比一下,发现把箭头挪动到小6旁边,猪尾巴就成功了。当然你仔细观察的话,还有其他的比如文字也是类似。那么我们可以确认这张图片应该是被打乱的,如果我们可以把它拼起来,是不是就离计算缺口位置比较近了。现在我们应该要注意...
千龍 发布于 5天前 阅读 822 评论 12

区块链面试招聘中可能会被问到的40个问题。

1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成。一个块只不过是一个记录列表。当这些列表相互结合时,它们被称为区块链。例如,一个组织有100个分类账簿,其中的组合被称为区块链,单个分类账将被视为一个区块。 2. 问:为什么区块链是一种值得信赖的方法 有很多原因,区块链可以被信任。第一个原因是它与其他商业应用程序有良好的兼容性,因为它是开源的。其次是它的安全性,因为它是为了在线交易而开发的,所以开发人员在保证安全性的同时也特别关注它的数据同步。由于其拥有的业务类型无关,所以在选择的时候区别链很容易地被考虑。 3. 问:区块链中是否有可能从网络中删除一个或多个区块? 当然可以,如果只考虑该在线分类帐的特定部分的时候。借助默认选项和过滤器,可以轻松完成此任务,而不需要付出太多。 4. 问:你对区块链了解多少? 这是一种实际上为比特币设计的技术,后来因为监控和记录网络上所有金融交易而带来的多种好处而获得了大量的推广。这是一种值得信赖的方法,目前情况下有很多组织正在使用它。由于一切都是十分安全的,并且它是一种开源方式,所以从长远来看,它可以轻松获得大家的信任。 5. 问:区块链方法如何识别...
笔阁 发布于 6天前 阅读 483 评论 1

Docker的iptables配置

Docke
玛雅牛 发布于 2小时前 阅读 2

Spring之IOC容器实现

Spring IOC
Izecson 发布于 6小时前 阅读 2

RecyclerView的刷新分页

在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作。 1. RecyclerView的使用请参考:[RecyclerView的简单使用](https://my.oschina.net/jzmanu/blog/1798182) 2. RecyclerView的 Item 的单击事件请参考:[RecyclerView的 Item 的单击事件](https://my.oschina.net/jzmanu/blog/1798762) ### 实现思路 1. 加载更多数据使用到 RecyclerView 加载多种布局,根据 ViewType 判断加载数据 Item 还是加载 FooterItem ; 2. 通过线程模拟加载数据; 3. 为 RecyclerView 添加 addOnScrollListener 事件来监听用户的滑动操作; 4. 根据用户滑动状态以及具体情况开始加载数据 5. 通知数据更新; ### 如何获得 firstVisibleItemPosition 为了能够在数据加载中动态判断什么时候加载数据,需要知道屏幕上显示的第一个可见的 Item 的位置,当然了这里使用的是布局管理器是 LinearLayoutManager ,这样查找屏幕上第一个可见的 Item 就显得容易多了,下面介绍一些 LinearLayoutManager 的四个方法: #### findFirstVisibleItemPosition() 获得屏幕上第一个可见 Item 的 position,只要该 Item 有一部分可见,那么返回的 position 就是该Item 的 position。 #### findF...
jzman 发布于 7小时前 阅读 1

CentOs7 安装docker

1. 系统要求 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。 2. 卸载旧版本 旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本: $ sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine 3. 使用 yum源安装 执行以下命令安装依赖包: $ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 执行下面的命令添加 yum 软件源: $ sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo # 官方源 # $ sudo yum-config-manager \ # --add-repo \ # https://download.docker.com/linux/centos/docker-ce.repo 如果需要最新版本的 Docker CE 请使用以下命令: $ sudo yum-config-manager --enable docker-ce-edge 如果需要测试版本的 Docker CE ...
紫川帝林 发布于 7小时前 阅读 5

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件

8.6 管道符和作业控制 管道符的作用在于将符号前面的结果丢给符号后面的命令。管道符后面并不是所有的命令都可以,一般针对文档操作的命令比较常用,eg:cat、less、head、tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等等。 作业控制 Ctrl+z 暂停一个正在执行的任务 jobs 查看在后台运行的任务 bg[id] =background把任务调到后台运行 fg[id] =foreground把任务调到前台运行 “&” 命令后面加&相当于直接把任务调到后台运行 8.7-8.8 shell变量 env命令:查看系统内置环境变量 [root@cham2 ~]# env XDG_SESSION_ID=3 HOSTNAME=cham2 TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.230.1 59299 22 SSH_TTY=/dev/pts/1 USER=root LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz...
Champin 发布于 7小时前 阅读 3

JAVA基础(12)--interrupt中断线程

interrupt中断线程 如果线程在调用 Object 类的 wait方法,或者该类的 join、sleep方法过程中受阻(也就是说线程处于冻结状态),这时候调用interrupt方法,就会让它的中断(中断就是冻结)状态将被清除(也就是强制恢复执行资格),它还将收到一个 InterruptedException异常----比如你try-catch中有调用了wait方法,你调用了interrupt方法,就会强制恢复执行资格,还会抛出一个异常。 总结: interrupt() 方法只是改变中断状态而已,它不会中断一个正在运行的线程。这一方法实际完成的是,给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态
Chason-洪 发布于 8小时前 阅读 2

Map,Model,ModelMap使用方法

1.Spring MVC在内部使用了一个org.springframework.ui.Model接口存储模型数据 具体步骤: 1.Spring MVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。 2.如果方法的入参为Map,Model类型,Spring MVC会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所以数据,也可以向模型中添加新的属性数据。 @RequestMapping("/testmap") public String testmap(Map<String,Object> map) { map.put("age", 13); return "success"; } @RequestMapping("/testModel") public String testModel(Model model) { model.addAttribute("email","ddd@qq.com"); return "success"; } @RequestMapping("/testModelmap") public String testModelmap(ModelMap modelMap) { modelMap.addAttribute("city", "Beijing"); return "success"; } ${requestScope.age } ${requestScope.email} ${requestScope.city} 三种方式处理模型数据: 1.Map.put(string,object); 2.Model.AddAttribute(string,object); 3.ModelMap.AddAttribute(string,object);...
沉迷于编程的小菜菜 发布于 8小时前 阅读 3 评论 1

Java技术——你真的了解String类的intern()方法吗

0.引言 什么都先不说,先看下面这个引入的例子: String str1 = new String("SEU")+ new String("Calvin");     System.out.println(str1.intern() == str1);  System.out.println(str1 == "SEUCalvin");   本人JDK版本1.8,输出结果为: true   true   再将上面的例子加上一行代码: String str2 = "SEUCalvin";//新加的一行代码,其余不变   String str1 = new String("SEU")+ new String("Calvin");       System.out.println(str1.intern() == str1);    System.out.println(str1 == "SEUCalvin");    再运行,结果为: false   false   是不是感觉莫名其妙,新定义的str2好像和str1没有半毛钱的关系,怎么会影响到有关str1的输出结果呢?其实这都是intern()方法搞的鬼!看完这篇文章,你就会明白。o(∩_∩)o  说实话我本来想总结一篇Android内存泄漏的文章的,查阅了很多资料,发现不得不从Java的OOM讲起,讲Java的OOM又不得不讲Java的虚拟机架构。如果不了解JVM的同学可以查看此篇 JVM——Java虚拟机架构。(这篇文章已经被我修改过N多次了,个人感觉还是挺全面清晰的,每次看都会有新的理解。) 在JVM架构一文中也有介绍,...
码代码的小司机 发布于 8小时前 阅读 4

Linux无处不在:引擎盖下的胖企鹅

宝马、雪佛兰、本田、梅赛德斯和特斯拉有一个共同点:它们的汽车都运行 Linux。汽车成为了一个软件平台,而这个平台上运行的是 Linux,它的主要竞争对手黑莓的 QNX 和微软的 IoT Connected Vehicles 都在失去领地。Linux 基金会与福特、本田、马自达、尼桑、梅赛德斯、铃木,以及最大汽车公司丰田等组建了 Automotive Grade Linux (AGL),创建基于 Linux 的汽车解决方案。 特斯拉公司则使用自己的基于 Ubuntu 的方案,它最近释出了 8.1 更新 (17.24.30),将 Linux 内核版本从古老的 2.6.36 升级到了 4.4.35。AGL 不是唯一一个将 Linux 整合到汽车中的工作组,福特、丰田、马自达和铃木等组建了 SmartDeviceLink (SDL)联盟,开发基于 Linux 开源方案将智能手机和汽车无缝整合在一起。Google 则开发了 Android Auto。打车软件公司 Lyft 广泛使用 Ubuntu,其中包括在自动驾驶汽车使用 Ubuntu。 原文来自:https://www.linuxprobe.com/linux-anywhere-car.html...
问题终结者 发布于 8小时前 阅读 4

hadoop 自带 workcount

1、启动 hdfs 并建立目录,上传文件 #启动 hadoop start-dfs.sh #... #创建一个多层级的目录结构 hadoop fs -mkdir -p /wordcount/input #将本地文件 a.txt 上传至目录中。也可以上传多个文件 hadoop fs -put a.txt /wordcount/input   2、启动 yarn start-yarn.sh #...   3、运行hadoop自带的mapreduce样例 hadoopjarhadoop-mapreduce-examples-2.6.4.jarwordcount/wordcount/input/     /workcount/output/ #hadoop固定前置关键词 #jar表示运行jar文件 #hadoop-mapreduce-examples-2.6.4.jar需要被运行的jar文件 #wordcountjar文件的中的主类名称(该类的作用是统计某一目录下所有文     件所包含的字数并输出) #/wordcount/input/主类需要的第一个参数。hdfs的目录 #/wordcount/output/主类需要的第二个参数。hdfs的目录   4、查看输出结果 hadoop fs -cat /wordcount/output/part-r-00000          ...
Roadom 发布于 8小时前 阅读 4

JVM GC 算法和相关GC收集器

gc各种算法和gc收集器介绍说明
20岁的King 发布于 8小时前 阅读 16

numpy基础知识(一)

## 创建ndarray ``` In [1]: data = [[1,2,3,4],[5,6,7,8]] In [2]: arry = np.array(data) In [3]: arry Out[3]: array([[1, 2, 3, 4], [5, 6, 7, 8]]) ``` ## 查看ndarray的维度 ``` In [4]: arry.ndim Out[4]: 2 ``` ## 输出ndarray的行数和列数 ``` In [5]: arry.shape Out[5]: (2, 4) ``` ## zeros和ones可以创建指定长度或形状的全是零和一的数组 ``` In [15]: np.zeros((3,4)) Out[15]: array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) ``` ## empty会产生一些未初始化的垃圾值 ``` In [17]: np.empty((2,3,2)) Out[17]: array([[[0., 0.], [0., 0.], [0., 0.]], [[0., 0.], [0., 0.], [0., 0.]]]) ```...
Joseph_hu 发布于 9小时前 阅读 2

JSON***未完,待续***

传输到后台的是字符串,后台传回给前端的也是字符串(内部是json),然后解析正常的json
Mrs_CoCo 发布于 9小时前 阅读 2

Mongo 代理程序实现-复制集搭建及抓包篇

如标题所述,本系列教程是教你如何手撸一个 mongo 代理程序。教程分为两篇, 复制集搭建及抓包篇 和 代码实战篇 。 Q: 这程序有什么卵用? 为了更加贴近实际生产环境,我会从数据库复制集搭建,wireshark 抓取解析 mongo 包以及实际 go 逻辑编写,三个部分进行详细的讲解,最终目标是为了实现一个具备读写分离,自动主备切换的稍微健壮一点的 mongo 代理程序。 文章可能有点长,请耐心阅读。 复制集搭建 复制集架构我选择了一主 (Primary),一备 (Secondary),一仲裁 (Arbiter):   主节点 (Primary): 只能有一个,用于接收所有的写操作,并将写入的数据同步到其它备份节点上 备份节点 (Secondary): 可以有多个,用于备份主节点的数据,可以参与复制集选举 仲裁节点 (Arbiter): 不参与选举,不同步主节点数据,当主节点挂了后,自动从备份节点中选举一个作为主节点 闲话不多说,直接上配置文件吧: ## mgo_conf1.yaml processManagement: fork: true #mongod以守护进程的方式在后台执行 net: bindIp: 127.0.0.1 port: 21000 storage: dbPath: /data/db1 #mongo数据文件存储地址 systemLog: destination: file path: "/data/db1/log/mongo.log" #系统...
烂猪皮 发布于 9小时前 阅读 2

JVM学习总结(三)GC

### GC的意义 - 它使得java程序员不再时时刻刻的关注内存管理方面的工作 - 垃圾回收机制会自动的管理jvm内存空间,将那些已经不会被使用到了的"垃圾对象"清理掉",释放出更多的空间给其他对象使用 ### 判断对象是否可再被使用 GC在堆进行回收前,第一件事就是要确定这些对象之中哪些“存活”着,哪些已经死去(不可能再被使用的),如下两种算法判断 - 引用计数法算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的,就表示可以回收 引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的选择,主流的Java虚拟机里面没有选用引用计数算法来管理内存,主要是由于很难解决对象之间的循环引用的问题。 ``` public class LoopReferenceDemo { public static void main(String[] args) { A a = new A(); // 1 B b = new B(); // 2 a.b = b; // 3 b.a = a; // 4 a = null; // 5 b = null; // 6 } } class A { public B b; } class B { public A a; } ``` 虽然a和b都为null,但是a和b存在循环引用,这样a和b就永远不会被回收 第一行 : TestA的引用计数器加1,TestA的...
hensemlee 发布于 9小时前 阅读 4

IDEA搭建Spring boot问题集

常见问题一
lar555 发布于 9小时前 阅读 3

JavaSE —— IO简介

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 IO: 介绍:就是输入和输出,它所运输的就是字节,就是说我们可以从磁盘上的文件运输到程序的内存中,也可以从内存上通过输出管道输出到磁盘上去或者是传输到网络上的某一台计算机上去 8位流 介绍:又叫做字节流,此流的最小运输单位是一个字节,8位流不管是什么文件它都可以进行运输,都可以进行读取,因为它最小的单位就是以字节为单位 8位流的祖先类: java.io.InputStream 输入 方法: FileInputStream 磁盘文件读取 读取一个字节,一个一个字节读取,也可以强制转换成char数组 字节数组的读取,读取五个字节上来 一口气把你所有的字节读取上来 把字节读取到byte数组来,定位置存,从第0个存放三个进来,第五个存放四个进来选定存储位置的存储方案 跳过字节读取,跳过3个字节读取,然后在一口气读取上来 就好比读取电脑的某一个文件,你正在运行那个文件,你是做不了删除那个文件的,所以你要关闭那个文件才能进行操作,而close就是关闭 BufferedInputStream ByteArrayInputStream ObjectInputStream DataInputStream java.io...
凯哥学堂 发布于 9小时前 阅读 4

linux查看文件磁盘占用情况

查看磁盘整体使用率 df -h 逐级查看磁盘目录使用情况 du --max-depth=1 -h
王超波 发布于 9小时前 阅读 2

用solidity语言开发代币智能合约

智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助。 以太坊的应用被称为去中心化应用(DApp),DApp的开发主要包括两大部分: 智能合约的开发 用户界面的开发 在本文中,我们将介绍智能合约的开发语言solidity。 让我们先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节。 contract SimpleStorage { uint storedData; function set(uint x) { storedData = x; } function get() constant returns (uint retVal) { return storedData; } } 在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状态)组成。合约位于以太坊区块链上的一个特殊地址。 uint storedData; 这行代码声明了一个状态变量,变量名为storedData,类型为 uint (256bits无符号整数)。你可以认为它就像数据库里面的一个存储单元,跟管理数据库一样,可以通过调用函数查询和修改它。在以太坊中,通常只有合约的拥有者才能这样做。在这个例子中,函数 set 和 get 分别用于修改和查询变量的值。 跟很多其他语言一样,访问状...
笔阁 发布于 9小时前 阅读 3

数据倾斜整理(转)

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,而由于数据倾斜的原因造成map处理数据量的差异过大,使得这些平均值能代表的价值降低。Hive的执行是分阶段的,map处理数据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀的分配到各个reduce中,就是解决数据倾斜的根本所在。规避错误来更好的运行比解决错误更高效。在查看了一些资料后,总结如下。 1数据倾斜的原因 1.1操作: 关键词 情形 后果 Join 其中一个表较小, 但是key集中 分发到某一个或几个Reduce上的数据远高于平均值 大表与大表,但是分桶的判断字段0值或空值过多 这些空值都由一个reduce处理,灰常慢 group by group by 维度过小, 某值的数量过多 处理某值的reduce灰常耗时 Count Distinct 某特殊值过多 处理此特殊值的reduce耗时 1.2原因: 1)、key分布不均匀 2)、业务数据本身的特性 3)、建表时考虑不周 4)、某些SQL语句本身就有数据倾斜   1.3表现: 任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未...
无精疯 发布于 9小时前 阅读 5

完整微服务化示例:使用 Apache ServiceComb (incubating) 进行微服务开发、容器化、弹性伸缩

最完整的微服务化示例,从业务场景入手,讲述微服务化架构设计、容器化、集群部署、弹性伸缩
ServiceComb 发布于 3天前 阅读 2020 评论 8 点赞 1 打赏 1

使用Remix编译和部署以太坊智能合约

![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113835_7UHh.png "以太坊remix汇智网") Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。 本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。 详细描述使用 Remix 的步骤及使用上可能碰到的问题。 之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。 ### 开发环境 不需要安裝,直接在任何浏览器启动 Remix。 ![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113913_wFJy.png "以太坊remix汇智网") ### 取得代币合约 代币合约的范例很多,Ethereum 官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN): ``` pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply ...
笔阁 发布于 4天前 阅读 1026 评论 2 点赞 2

手把手教你打造一个可视化接口自动化测试系统

现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都可以称之为接口,面临着如此庞大的接口数据,如果更好的管理和测试他们都是一个比较头疼的问题,更主要的是很多业务场景是需要多个接口进行联调的,因此在接口开发完成后,一轮自动化测试能快速反馈出当前系统的状况,面对这样的需求,一个对测试人员友好的可视化接口自动化测试系统就显得必不可少了。那么,我们今天就来和大家聊聊如何实现一个小型的http接口自动化测试系统! 我们拿DOClever 做为这套系统的范本进行阐述,因为它是开源的,源码随时可以从GitHub和OSChina上获取,同时,这套系统内置了完整的自动化测试框架,从无需一行代码的UI测试用例编写,到更强大更灵活的代码模式,都提供了很友好的支持。 系统需求: 1.   能在一个测试用例里可以对一个接口自由编辑其入参,运行并判断出参是否正确,同时可以查看该接口完整的输入输出数据 2.   能在一个测试用例里可以对一组接口进行测试,自由调整他们的执行顺序,并根据上一接口的出参作为下一接口的入参条件。 3.  ...
ansun123 发布于 5天前 阅读 2326 点赞 7

数据权限管理中心 - 基于mybatis拦截器实现

基于mybatis拦截器实现简单的数据权限管理中心
GMarshal 发布于 6天前 阅读 1722 评论 14 点赞 6

Ubuntu 编译ffmpeg 实现GPU 转码

    前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeg gpu 转码的过程。          该文章后续仍在不断的更新修改中, 请移步到原文地址 https://my.oschina.net/u/2950272/blog 环境: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" 注意,这里机器启动级别调低,不要加载桌面系统。 本机是2核4G 普通硬盘,gpu 型号:GTX950M 第一部分,安装cuda 8:     1.1 查看是否有显卡: lspci | grep -i nvidia     1.2 查看操作系统是否cuda 官方支持: uname -m && cat /etc/*release     1.3 安装gcc g++ 等编译依赖基础库 apt-get install gcc g++ build-essential     1.4 下载安装cuda 下载cuda: wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 安装 cuda 源: dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 添加源: deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / 更新缓存: apt-get update 安装cuda: apt-get i...
鼎铭 发布于 7天前 阅读 1950 评论 25 点赞 4

Docker容器可视化监控中心搭建

一个宿主机上可以运行多个容器化应用,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息,而且这些信息随时间变化,我们称其为时序数据
hansonwang 发布于 1周前 阅读 3029 评论 7 点赞 4

EMQ百万级MQTT消息服务(小技巧)

![](http://i.imgur.com/vhdeDvX.png) 附上: 喵了个咪的博客:[w-blog.cn](w-blog.cn) EMQ官方地址:[http://emqtt.com/](http://emqtt.com/) EMQ中文文档:[http://emqtt.com/docs/v2/guide.html](http://emqtt.com/docs/v2/guide.html) ## 1.ACL鉴权规则化 在正常业务使用下对于客户端的行为可以使用ACL进行限制,比如A客户端只能订阅 /A/get 队列消息和向 /A/set 发布内容 但是在MYSQL里面处理这样的鉴权就需要写入两条记录,如果设备量有一百万数据库就要承担两百万条鉴权数据量会大大影响数据库的性能 那么有没有什么批量的方式来定义ACL鉴权呢? 在mysql-ACL鉴权的配置文件下关于如何使用鉴权的SQL是可以编辑的,也就意味着你可以通过SQL来实现批量ACL鉴权规则 ```bash > vim /usr/local/emqttd/etc/plugins/emq_auth_mysql.conf # 最下面有这样一条配置 auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c' ``` 笔者这里就实现每个设备默认可以订阅 /A/get 队列消息和向 /A/set 发布 ![](http://pic.w-blog.cn/ADE78396-BF03-4672-A3E2-07F04...
喵了_个咪 发布于 1周前 阅读 2269 评论 3

Apache Ignite事务架构:Ignite持久化的事务处理

在本系列[上一篇文章](https://my.oschina.net/liyuj/blog/1791800)中,介绍了故障和恢复,下面是本系列剩下的文章将要讨论的主题: - Ignite持久化的事务处理(WAL、检查点及其他) - 第三方持久化的事务处理 在本文中,会聚焦于Ignite持久化的事务处理。 将[Apache Ignite](https://ignite.apache.org/)作为内存数据网格(IMDG)的都知道,如果整个集群瘫痪,仅仅将数据保存在内存中问题是很严重的,其他的IMDG以及缓存技术也会面临同样的问题。解决这个问题的方案之一就是,将Ignite与第三方的持久化存储集成,然后提供通读和通写能力,如图1所示: ![图1:使用第三方存储进行持久化](https://www.gridgain.com/sites/default/files/inline-images/Figure1_10.png) 但是,这个方法有一些缺陷,在本系列的下一篇文章中会说明。 作为第三方持久化的替代方案,Ignite开发了一个固化内存架构,如图2所示,该架构可以同时在内存和磁盘上进行数据和索引的存储和处理,该特性使用非常简单,使得Ignite集群在数据落盘的前提下,获得内存级的性能: ![图2:固化内存](https://www.gridgain.com/sites/default/files/inline-images/Figure2_9.png) 固化内存的工作方式类似于现代操...
李玉珏 发布于 2周前 阅读 962 点赞 3

架构师眼中的高并发架构

以架构师的眼光来讲述高并发架构
高级架构师 发布于 2周前 阅读 4201 评论 12 点赞 21

有助于提高"锁"性能的几点建议

qq:853089986@qq.com
张泽立 发布于 2周前 阅读 2267 评论 10 点赞 12

如何用Nginx搭建一个安全的、快速的微服务架构

本文改编自Chris Stetson发表在nginx.conf 上的一个有关如今的微服务以及如何使用Nginx构建一个快速的、安全的网络系统的演讲,大家可以在YourTube上回看此次演讲。 自我介绍 Chris Stetson:Hi,我的名字是Chris Stetson,我在Nginx带领专业服务部门,同时也领导微服务实践。 今天我们要谈论微服务以及如何使用Nginx构建一个快速的、安全的网络系统。在我们谈话的最后,我们将与我们在Zokets的合作伙伴向您展示一个使用Fabric模式如何非常快速和轻松地构建一个微服务的demo。 在我们探讨Fabric模式之前,我想谈一谈微服务并且从Nginx的角度来看这意味着什么。 0:56 - 大转变 微服务已经引起了应用程序架构的重大转变。 当我第一次开始构建应用程序时,他们都是差不多的。幻灯片中所展示的单体架构也象征了应用程序的构造方式。 目前存在着某种类型的虚拟机(VM),对我来说,就是通常的Java。在虚拟机中应用的功能组件以对象的形式存在,这些对象是在内存中相互通讯的,它们将来来回回处理并进行方法调用。偶尔,你会采用诸如通知等机制来接触到其他系统以便获取数据或传递信息。 有了微服务之后,应用程序如何构建的范式是完全不同的了。你的功能组件会从在同一个主机的...
烂猪皮 发布于 2周前 阅读 3830 评论 11 点赞 4

List集合就这么简单【源码剖析】

前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识。 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是数组。线程不安全 LinkedList 底层数据结构是链表。线程不安全 Vector 底层数据结构是数组。线程安全 这篇主要来看看它们比较重要的方法是如何实现的,需要注意些什么,最后比较一下哪个时候用哪个~ 看这篇文章之前最好是有点数据结构的基础:Java实现单向链表,栈和队列就是这么简单,二叉树就这么简单         当然了,如果讲得有错的地方还请大家多多包涵并不吝在评论去指正~ 一、ArrayList解析     首先,我们来讲解的是ArrayList集合,它是我们用得非常非常多的一个集合~ 首先,我们来看一下ArrayList的属性:     根据上面我们可以清晰的发现:ArrayList底层其实就是一个数组,ArrayList中有扩容这么一个概念,正因为它扩容,所以它能够实现“动态”增长 1.2构造方法 我们来看看构造方法来印证我们上面说得对不对:     1.3Add方法 add方法可以说是ArrayList比较重要的方法了,我们来总览一下:     1.3.1add(E e) 步骤: 检查是否需要扩容 插入元素 首先,我们来看看这个方法: ...
Java3y 发布于 2周前 阅读 2339 评论 4 点赞 6

约瑟夫环的几种实现方式

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。
珂jack 发布于 2周前 阅读 2206 评论 18

从linux源码看socket的阻塞和非阻塞

# 从linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。 ## 一个TCP非阻塞client端简单的例子 如果我们要产生一个非阻塞的socket,在C语言中如下代码所示: ``` // 创建socket int sock_fd = socket(AF_INET, SOCK_STREAM, 0); ... // 更改socket为nonblock fcntl(sock_fd, F_SETFL, fdflags | O_NONBLOCK); // connect .... while(1) { int recvlen = recv(sock_fd, recvbuf, RECV_BUF_SIZE) ; ...... } ... ``` 由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。 ### socket的创建 很明显,内核的第一步应该是通过AF\_INET、SOCK\_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: ![inet_family](https://static.oschina.net/uploads/img/201804/08095807_GSaV.png "inet_family") 我们跟踪源码调用 ``` socket(AF_INET, SOCK_STREAM,...
无毁的湖光-Al 发布于 2周前 阅读 3712 评论 12 点赞 7 打赏 1

Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1

Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1
悦动智能 发布于 3周前 阅读 2137 评论 8 点赞 3

深入浅出设计模式——从球赛中悟命令模式

命令模式,顾名思义就是向对象发出命令使其执行指定操作。具体的说就是以命令的形式发出请求交给调用对象,随后调用对象又将命令传送给需要处理这条命令的对象并让目标对象执行该命令。
珂jack 发布于 3周前 阅读 1346 评论 8 点赞 5 打赏 1

Spring整合Quartz分布式调度

前言 为了保证应用的高可用和高并发性,一般都会部署多个节点;对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源,另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务。 Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.spri...
ksfzhaohui 发布于 3周前 阅读 3876 评论 14 点赞 13

Shell入门看我吧

shell入门的文章,对shell不太熟悉小伙伴可以看看
aron1992 发布于 3周前 阅读 2524 评论 6 点赞 9

MySQL的索引是什么?怎么优化?

索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
我叫刘半仙 发布于 3周前 阅读 5565 评论 14 点赞 40

Session管理之超时设置和强制下线

Session,强制下线
海岸线的曙光 发布于 4周前 阅读 4218 评论 13 点赞 6
顶部