怎么把每日任务直接换成钉钉打卡可以换手机吗 打一次卡后就看不到钉钉打卡可以换手机吗的界面了 help

哪个背单词的 App 更好用? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title=",709,094分享邀请回答37838 条评论分享收藏感谢收起24478 条评论分享收藏感谢收起努力了这么久,但凡有点儿天赋,也该有些成功的迹象了。
ArangoDB 是一个开源的分布式原生多模型数据库,是兼有图 (graph)、文档 (document)和键/值对 (key/value) 三种数据模型的 NoSQL 数据库。ArangoDB 使用类SQL的查询语言(AQL)构建出高性能应用程序。 ArangoDB 的安装 ArangoDB 支持在 Windows、Linux、Dcoker、Mac 等多种系统下运行。本文将以 Windows、Linux 系统为例讲解如何安装和配置。 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(默认情况...
本文来自作者 陈伟荣 在 GitChat 分享的文章【微服务开发中的数据架构设计】 前言 微服务是当前非常流行的技术框架,通过服务的小型化、原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合、业务的灵活调整组合以及系统的高可用性。为业务创新和业务持续提供了一个良好的基础平台。本文分享在这种技术架构下的数据架构的设计思想以及设计要点,本文包括下面若干内容。 微服务技术框架中的多层数据架构设计 数据架构设计中的要点 要点1:数据易用性 要点2:主、副数据及数据解耦 要点3:分库分表 要点4:多源数据适配 要点5:多源数据缓存 要点6:数据集市 为了容易理解,本文用一个简化的销售模型来阐述,如下图。图1显示了客户、卖家、商品、定价、订单的关系(这里省略支付、物流等其他元素)。 图1 销售模型 在这个销售模型中,卖家提供商品、制定价格,客户选择产品购买、形成销售订单。根据微服务的理念设计,可以划分为客户服务、卖家服务、商品服务、定价服务、订单服务,以及公共服务(比如认证、权限、通知等),如图2所示。 图2 微服务功能 微服务架构中的多层数据架构设计 分布式架构一般把系统分为 Saas(Software-as-a-Service)、Paas(P...
(一)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 版本,包括虚拟机也一样,...
我们可使用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...
# 前后端对接的思考及总结 ## 说在前面的话 随着前端NodeJs技术的火爆,现在的前端已经非以前传统意义上的前端了,各种前端框架(Vue、React、Angular......)井喷式发展,配合NodeJs服务端渲染引擎,目前前端能完成的工作不仅仅局限于CSS,JS等方面,很多系统的业务逻辑都可以放在前端来完成,例如我司的**管控** 那可能有些人会说,前端这么火,NodeJs发展这么迅猛,后端是不是以后都没事情干了,其实不然,拿Java来说,经过这么多年发展,已经相当稳定,完善的生态圈也非最近今年发展起来的NodeJs可比,我们常常说**闻道有先后,术业有专攻**,用在这里最合适不过了,**集群**、**分布式**、**高可用**等等技术还是需要后端架构师来思考的事情 目前前端同后端的合作方式是前后端分离,通过Nginx+Tomcat的组合部署(还可加nodejs中间件)方式能有效的进行解耦,并且前后端分离为项目以后的架构扩展、微服务化、组件化都打下重要基础,所以这在以后是一个发展的必然趋势,我们需要去适应,做出改变!!! ## 早期的开发方式 早期的开发方式如下图: ![输入图片说明](https://static.oschina.net/uploads/img/x.png "在这里输入图片标题") 这也是我前面工作1-3年的开发方式...
这是之前解决的2个小bug,在此记录下。
这篇文章是我在 2018【[携程技术沙龙移动技术专场](https://mp.weixin.qq.com/s/B3eWQmgUZYFeGPs4DWo8gw)】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 发布在【[开源中国博客](https://my.oschina.net/kymjs)】,希望能给买不到票参加大会的朋友带来帮助。 [![Android 模块化](https://kymjs.com/qiniu/images/blog_image/napos-modular.001](https://kymjs.com/code//01/) 大家好,今天跟大家分享的主题是《Android工程模块化平台的设计》 [![Android 模块化](https://kymjs.com/qiniu/images/blog_image/napos-modular.002](https://kymjs.com/code//01/) 首先自我介绍一下:我叫张涛,目前就职于饿了么移动技术部。可能有些朋友认识我,我之前也会在我博客【[开源实验室](https://kymjs.com)】写一些Android相关的技术点,如果对今天讲的模块化设计,你觉得有什么问题或者可以深入探讨的,也欢迎加我微信`kymjs123`详聊。 [![Android 模块化](https://kymjs.com/qiniu/images/blog_image/napos-modular.003](https://kymjs.com/code//01/) 今天我们讲的主题是基于项目模块化来说的,模块化是什么大家肯定都是知道了的,...
前言 上一篇文章Spring整合Quartz分布式调度介绍了Quartz通过数据库的方式来实现分布式调度,通过使用数据库来存储trigger,job等信息,可以在停服重启的时候重新加载上次trigger的状态,保证了完整性;另一方面通过数据库来实现锁机制来实现分布式调度;Quartz默认提供了11张表,本文将对这几张表做简要的分析。 表信息 1.qrtz_blob_triggers
2.qrtz_cron_triggers
3.qrtz_simple_triggers
4.qrtz_simprop_triggers
5.qrtz_fired_triggers
6.qrtz_triggers
7.qrtz_job_details
8.qrtz_calendars
9.qrtz_paused_trigger_grps
10.qrtz_scheduler_state
11.qrtz_locks 共11张表,前6张都是关于各种triggers的信息,后面包括job,悲观锁,调度状态等信息;相关表操作在类StdJDBCDelegate中,相关sql语句在StdJDBCConstants中; 1.qrtz_blob_triggers 自定义的triggers使用blog类型进行存储,非自定义的triggers不会存放在此表中,Quartz提供的triggers包括:CronTrigger,CalendarIntervalTrigger, DailyTimeIntervalTrigger以及SimpleTrigger,这几个trigger信息会保存在后面的几张表中; 2.qrtz_cron_triggers 存储CronTrigger,这也是我们使用最多的触发器,在配置文件中做...
# 1. 前言 git 对象有四种:blob (数据块), tree (目录树), commit (提交), tag (标签)。 本文通过一个示例,以blob为例来讨论对象的存储结构。示例采用的git版本为**2.17** 。 # 2. 实践讨论 ## 2.1. 生成Blob对象文件 首先创建一个测试git仓库 ``` $ mkdir hello $ cd hello $ git init ``` 然后通过创建一个文件 test,test的内容为 "hello", 可以看到test文件的字节长度为6, 是因为创建文件的时候自动在行末加上了换行符\n。对文件其执行 `git add` , 可以看到在.git/objects目录下面生成了一个子目录ce,ce目录下面有个文件ba8dba906fe9ca394464a。 ``` $ echo "hello" & test $ du -b test 6 test $ git add test $ find .git/objects/ -type f .git/objects/ce/ba8dba906fe9ca394464a ``` 该文件即为git为 test 文件数据内容生成的blob对象文件,该对象的SHA值为`ceba8dba906fe9ca394464a`. 至此,产生两个问题: 1. **对象文件的数据结构是什么样的 ?** 2. **对象的SHA值又是如何生成的 ?** ## 2.2. 对象数据结构及SHA值 根据 [Git-Internals-Git-Objects](https://git-scm.com/book/en/v2/Git-Internals-G...
ES的查询方式可以分为三类: 简单查询 条件查询 聚合查询
数据准备 我们先按照前几篇介绍的插入文档的方法准备一些实验数据,然后再来演示如何实现各类查询。 我们在我们之前创建的rent索引的community类型下面加入如下文档信息。 回忆一下:当时创建的索引及类型如下: {
"settings":{
"number_of_shards":3,
"number_of_replicas":1
"mappings":{
"community":{
"properties":{
"communityname":{
"type":"text"
"type":"keyword"
"type":"integer"
"creationdate":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
} 回过头来,我们现在插入一些文档进去。插入的ES的API:http://localhost:9200/rent/community/ 所有文档的插入请求体如下:你可以把这些数据插入到你的ES中,然后try后续的各种查询。 {
"communityname":"万科阳光苑",
"city":"上海",
"creationdate":" 00:00:00"
"communityname":"万科朗润园",
"city":"上海",
"creationdate":"2006...
我们今天所知道的浏览器是一个逐步淘汰的模式吗?没有它我们可以使用网络吗?第二个问题的答案是肯定的。无头浏览器会扼杀网页设计吗? 无头浏览器:没有ui的ui 无头浏览器已经大约十年了。它们是基于标准渲染引擎(chrome,Webkit,壁虎)的应用程序,并且可以显示web内容而无需实际显示。他们缺乏视觉用户界面;它们是无头的。 最初,开发了无头浏览器,以便对网站进行快速和自动测试。通常情况下,这会通过调用级接口(Cli)或定义接口(Api)来实现。根据请求,错误消息被发送为屏幕截图,或者以其他指定方式发送。 自从引入了无头浏览器以来,开发者社区就已经对它们进行了拆分。有人认为这项技术是毫无意义的,而是将测试它们的设计和应用程序在一系列“正常”浏览器上。这是合理的。 毕竟,这个出价的访问者也不会使用无头浏览器。n.PhantomJS它是它最流行的类型之一,它也会产生错误消息,而这些信息并不存在于常规浏览器中。这只是部分有用的。
PhantomJS:最流行的无头浏览器之一。 作为服务器端基础技术,Node.js也非常流行于无头浏览器的创建者。这种类型的某种现代标本是n.ZombieJS这里的名字已经暗示了在。与名字所暗示的相反,ZombieJS据说非常快,使它成为...
最完整的微服务化示例,从业务场景入手,讲述微服务化架构设计、容器化、集群部署、弹性伸缩
微服务 开源项目 Apache ServiceComb(incubating) 的 微服务事务的数据一致性解决方案 Saga[4](以下简称Saga)进行了演进。相对于上一版[2],新演进的设计主要有以下优势: 极大提升易用性。开发者只需使用2-3个注解(即启用事务服务:EnableOmega、全局事务标记:SagaStart和子事务标记:Compensable)。 更方便扩展。对微服务框架的支持更友好。 数据一致性与业务逻辑解耦。在演进后的设计中,通过服务侧omega的引入,saga协调器的职责更为单一(只需负责协调事务的完整性),与具体业务无关,因此,开发人员可以聚焦在具体业务的开发。
摘要: 原创出处 http://www.iocoder.cn/Eureka/instance-registry-register/ 「芋道源码」欢迎转载,保留摘要,谢谢! **本文主要基于 Eureka 1.8.X 版本** - [1. 概述](http://www.iocoder.cn/Eureka/instance-registry-register/) - [2. Eureka-Client 发起注册](http://www.iocoder.cn/Eureka/instance-registry-register/) - [2.1 应用实例信息复制器](http://www.iocoder.cn/Eureka/instance-registry-register/) - [2.2 刷新应用实例信息](http://www.iocoder.cn/Eureka/instance-registry-register/) - [2.3 发起注册应用实例](http://www.iocoder.cn/Eureka/instance-registry-register/) - [3. Eureka-Server 接收注册](http://www.iocoder.cn/Eureka/instance-registry-register/) - [3.1 接收注册请求](http://www.iocoder.cn/Eureka/instance-registry-register/) - [3.2 Lease](http://www.iocoder.cn/Eureka/instance-registry-register/) - [3.3 注册应用实例信息](http://www.iocoder.cn/Eureka/instance-registry-register/) - [666. 彩蛋](http://www.iocoder.cn/Eureka/instance-registry-register/) --- ![](http://www.iocoder.cn/images/common/wec...
昨天编辑完已经很晚了,今天继续分享我的“并发编程15年”,前面没有看到的可以进我的主页观看。 上篇文章写到我为什么不停下来 这是一个合理的问题。 一个非常强大的系统依据上述内容就可以构建,或者我应该说,多年来经历系统上的冲击,上述基础经受住了时间的考验,并经历了比下一步(语法周边)更少的变化 。 我觉得这时可以离开了。 事实上,依据完美的后见之明,我相信停在这里将是一个合理的故事第一个版本。 然而,还有很多事情需要我们继续向前: 子进程没有并行性。 值得注意的是现在还缺乏任务和数据的并行性。 这对于构建.NET的任务和 PLINQ编程模型的人来说是痛苦的。 很多场景有潜在的并行性只是等待被发现,例如图像解码,多媒体管道,FRP渲染堆栈,浏览器,最终语音识别等等。 Midori的一个顶级目标是解决并发难题,尽管很多并行化是为了进程的“自由”,没有任务和数据并行性会使之受到损害。 进程之间的所有消息都需要RPC数据调度,因此无法共享对象。 缺少任务并行性的一个解决方案可能是将所有事物抽象为进程。 需要任务? 那就创建一个进程。 在Midori,他们有充足的条件完成这个工作。 然而,这样做需要调度数据。 这不仅是一个成本高昂的操作,而且...
基于支付场景的微服务高可用架构实战
Go语言实现的小型爬虫,基于selenium实现,功能比较简单,新人练手用,轻喷~
![以太坊remix汇智网](https://static.oschina.net/uploads/img/13835_7UHh.png "以太坊remix汇智网") Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。 本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。 详细描述使用 Remix 的步骤及使用上可能碰到的问题。 之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。 ### 开发环境 不需要安裝,直接在任何浏览器启动 Remix。 ![以太坊remix汇智网](https://static.oschina.net/uploads/img/13913_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 ...
# 概述 --- `Intellij IDEA`真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对`Intellij IDEA`的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的`Intellij IDEA`技巧分享给大家。本文是这个系列的第一篇,主要介绍一些你可能不知道的但是又实用的小技巧。 --- # 我最爱的【演出模式】 --- 我们可以使用【Presentation Mode】,将`IDEA`弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的`coding`。 可以使用`Alt+V`快捷键,谈出`View`视图,然后选择`Enter Presentation Mode`。效果如下: ![这里写图片描述](https://img-blog.csdn.net/49248?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnNvbmdiaW4x/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 这个模式的好处就是,可以让你更加专注,因为你只能看到特定某个类的代码。可能读者会问,进入这个模式后,我想看其他类的代码怎么办?这个时候,就要考验你快捷键的熟练程度了。你可以使用`CTRL+E`弹出最近使用的文件。又或者使用`CTRL+N`和`CTRL+SHIFT+N`定位文件。 如何退出这个模式呢?很简单,使用`ALT+V`弹出view视图,然后选择`Ex...
写在前面 不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。 然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器接网线敲shell命令,这不是我想要的运维人生”。 我也是一位程序员,所以我希望通过以下基于程序开发的一些例子,帮助大家解决这些困惑。大道理是相通的,测试、运维都可以借鉴。 几个典型的误区 拜大牛为师 有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。 我个人是反对这种方法的,主要的原因有几个: 1. 大牛很忙,不太可能单独给你开小灶,更不可能每天都给你开1个小时的小灶;而且一个团队里面,如果大牛平时经常给你开小灶,难免会引起其他团队成员的疑惑,我个人认为如果团队里的大牛如果真正有心的话,多给团队培训是最好的。然而做过培训的都知道,...
本文是学习大型分布式网站架构的技术总结。对架构一个高性能、高可用、可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考。文中一部分为读书笔记,一部分是个人经验总结,对大型分布式网站架构有较好的参考价值。 一、大型分布式网站架构技术 1、大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费服务,付费体验 2、大型网站架构目标 高性能:提供快速的访问体验。 高可用:网站服务一直可以正常访问。 可伸缩:通过硬件增加/减少,提高/降低处理能力。 安全性:提供网站安全访问和数据加密、安全存储等策略。 扩展性:方便地通过新增/移除方式,增加/减少新的功能/模块。 敏捷性:随需应变,快速响应;
3、大型网站架构模式 分层:一般可分为应用层、服务层、数据层、管理层与分析层; 分割:一般按照业务/模块/功能特点进行划分,比如应用层分为首页、用户中心。 分布式:将应用分开部署(比如多台物理机),通过远程调用协同工作。 集群:一个应用/模块/功能部署多份(如:多台物理机),通过负载均衡共同提供对外访问。 缓存:将数据...
GC的概念 Grabage Collection:在系统运行过程中占据空间的无用对象在一定时间范围内被及时清理来保证整个系统有足够的内存空间来运行。java中GC的对象是堆和永久区。
常用的GC算法 引用计数法(reference counting) 概念:对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。 出现的问题:①.引用和去引用伴随加法和减法,影响性能。②.很难处理垃圾对象的循环引用。下面一段代码说明循环引用问题:/** * GC引用计数法Demo * @author Administrator * */public class JvmGcDemo { public static void main(String[] args) { GcObject g1 = new GcObject();//栈中创建变量g1指向(引用)new出对象GcObject1(堆中),此时GcObject1的引用计数为1 GcObject g2 = new GcObject();//栈中创建变量g2指向(引用)new出对象GcObject2(堆中),此时GcObject2的引用计数为1 g1.o = g2;//GcObject1的引用计数再加1,引用计数=2 g2.o = g1;//GcObject2的引用计数再加1,引用计数=2 g1 =//GcObject1的引用计数减1,引用计数=1 g2 =//GcObje...
在产品的个性化推荐、用户分析、聊天机器人等领域,人工智能展示出了它的强大之处。为了让人工智能真正落地,您需要用到一个非常可靠的机器学习框架,TensorFlow 将是您的不二之选。
- 工作流程:Forward-Propagation、Backward Propagation、Partial Derivatives、Hyper Parameters - 深度网络:A single layer Neural Network、Wide Neural Network vs Deep Neural Network - 维度诅咒、权衡
说明 在讨论 Java I/O 之前要先讨论以下内容: 缓冲区操作 内核空间用户空间 虚拟内存 文件 I/O , 流 I/O UNIX I/O 模型 理解了以上内容会对 I/O 有比较清晰的认识 。
缓冲区操作
缓冲区是所有类型 I/O 的基础 , I/O 就是把数据从缓冲区中移进或者移出。
I/O 过程是将数据在用户空间进程缓冲区和内核缓冲区之间进行移动 , 数据的来源是外部的 I/O 设备。当进程请求 I/O 操作时 , 会执行一个系统调用,将控制权移交给系统内核。比如 C/C++ 语言的底层函数 open() , read() , write() , close() , 要做的就是执行系统调用。当内核被调用时,它要找到进程所需的数据,并把数据传送到用户空间内指定的缓冲区。内核试图对数据进行高速缓存或者预读取,因此进程所需要的数据可能已经在内核空间中了,此时只需要把这些数据拷贝到用户空间中即可。如果数据不在内核空间中,那么内核空间要去读取数据,用户空间进程被挂起。
数据从内核空间到用户空间需要进行一次内存拷贝,无法直接将数据从I/O设备传送到用户空间。因为,硬件设备通常不能直接访问用户空间;像磁盘这种基于块存储的硬件设备操作的是固定大小的数据...
## 环境主要依赖版本 - webpack@4.8.1 - webpack-cli@2.1.3 - webpack-dev-server@3.1.4 - react@16.3.2 - babel-core@6.26.3 - babel-preset-env@1.6.1 - bable-preset-react@6.24.1 ## webpack安装及配置 ### 1. 起步 新建项目目录,初始化npm,新建开发源目录 ``` mkdir webpack-react && cd webpack-react npm init -y mkdir src ``` ### 2.webpack-cli & webpack从4.x版本开始,需要同时安装webpack,webpack-cli(此工具用于在命令行中运行webpack)。 ``` npm install webpack webpack-cli --save-dev ``` ### 3.wepback配置文件 在项目根目录新建webpack.config.js文件,此文件为webpack运行核心文件。 #### webpack.config.js 基本配置 ``` // webpack.config.js const path = require('path'); module.exports = { entry: './src/index.js', // 入口文件 output: { // webpack打包后出口文件 filename: 'app.js', // 打包后js文件名称 path: path.resolve(__dirname, 'dist') // 打包后自动输出目录 } } ``` package.json 文件 scripts配置 ``` "scripts": { "build": "webpack" } ``` 此时在命令行运行npm run build,就能执行webpack了,webpack会自动去找项目根...
Q1:我们知道,Animation 动画内部其实是通过 ViewRootImpl 来监听下一个屏幕刷新信号,并且当接收到信号时,从 DecorView 开始遍历 View 树的绘制过程中顺带将 View 绑定的动画执行。那么,属性动画(Animator)原理也是这样么?如果不是,那么它又是怎么实现的? Q2:属性动画(Animator)区别于 Animation 动画的就是它是有对 View 的属性进行修改的,那么它又是怎么实现的,原理又是什么? Q3:属性动画(Animator)调用了 `start()` 之后做了些什么呢?何时开始处理当前帧的动画工作?内部又进行
导读 根据雅虎递交到 SEC 的文件,雅虎 CEO Marissa Mayer 将获得 23,011,325 美元的离职补偿。雅虎将核心资产出售给 Verizon 之后将变成一家控股公司,主要资产是其持有的阿里巴巴和雅虎日本股权 。 Mayer 将继续担任 CEO 直至交易完成,之后其职务将由董事 Thomas McInerney 执掌,她同时将退出雅虎董事会。Mayer 的离职补偿包括近 302 万美元现金以及此前被授予的限制性股票带来的约 2000 万美元收益。离职补偿不包括 Mayer 截至 3 月 8 日所持的价值 5,680 万美元的近 290 万股股票期权。雅虎和 Verizon 预计将在今年第二季度完成收购交易。 雅虎公司 (Yahoo! Inc., YHOO)详细说明了首席执行长梅耶尔(Marissa Mayer) 2,300万美元的离职补偿金,这一补偿是在该公司向Verizon Communications Inc. (VZ)出售核心资产后梅耶尔离任计划的一部分。 雅虎还在周一提交的监管备案文件中概述了遗留业务的领导人事安排,董事Thomas McInerney将掌管公司。经过上述出售后的雅虎,实际上将成为一家持有阿里巴巴集团(Alibaba Group Holding Ltd., BABA) 和Yahoo Japan大量股权的控股公司。梅耶尔将继续担任首席执行长直至交易完成,届时她将由McInerney接替,并退出雅虎董事会。 梅耶...
jdk源码,Boolean,Character
jdk源码,Byte,Short,Integer,Long,Float,Double,Math
1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似。所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生。ReentrantLock 的主要功能和 synchronized 关键字一致,均是用于多线程的同步。但除此之外,ReentrantLock 在功能上比 synchronized 更为丰富。比如 ReentrantLock 在加锁期间,可响应中断,可设置超时等。 ReentrantLock 是我们日常使用很频繁的一种锁,所以在使用之余,我们也应该去了解一下它的内部实现原理。ReentrantLock 内部是基于 AbstractQueuedSynchronizer(以下简称AQS)实现的。所以要想理解 ReentrantLock,应先去 AQS 相关原理。我在之前的文章 AbstractQueuedSynchronizer 原理分析 - 独占/共享模式 中,已经详细分析过 AQS 原理,有兴趣的朋友可以去看看。本文仅会在需要的时候对 AQS 相关原理进行简要说明,更详细的说明请参考我的其他文章。 2.原理 本章将会简单介绍重入锁 ReentrantLock 中的一些概念和相关原理,包括可重入、公平和非公平锁等原理。在介绍这些原理前,首先我会介绍 ReentrantLock 与 synchronized 关键字的相同和不同之处。在此之后才回去介绍重入、公平和...
java虚拟机的基本结构 1、类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。 2、方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。 3、java堆:在java虚拟机启动的时候建立java堆,它是java程序最主要的内存工作区域,几乎所有的对象实例都存放到java堆中,堆空间是所有线程共享的。 4、直接内存:java的nio库允许java程序使用直接内存,从而提高性能,通常直接内存速度优于java堆。对读写频繁的场合可能会考虑适用。 5、java栈:每个虚拟机线程都是一个私有的栈,一个线程的java栈在线程创建的时候被创建,java栈中保存这局部变量、方法参数、同时java的方法调用、返回值等。 6、本地方法栈:本地方法栈和java栈非常类似,最大不同为本地方法栈用于本地方法调用。java虚拟机允许java直接调用本地方法(通常使用C编写) 7、垃圾回收系统:垃圾回收系统是java的核心,也是必不可少的,java有一套自己进行垃圾清理的机制,开发人员无需手动清理。 8、PC寄存器:pc寄存器也是每个线程私有的空间,java虚拟机会为每个线程创建PC寄存器,在任意时刻,一个java线程总是执行一个方法,这个方法被...
简评:VSCode 是一个开源的跨平台编辑器,是我最满意的 IDE 之一。本文介绍了几种使用的插件,确实解决了很多的痛点。
okhttpclient 的简单封装工具类
Jenkins通过参数插件传参给maven,调用不同环境的资源文件进行自动化部署
智能合约其实就是一种软件程序,它可以根据多个参与方之间的约定条款, 在不同的条件下自动执行不同的指令,例如,当收到买方的货款后卖方自动发货。 智能合约常常被类比为「自动贩卖机」,因为大家认为这样比较容易理解: ![输入图片说明](https://static.oschina.net/uploads/img/15737_AiES.jpg "在这里输入图片标题") 自动贩卖机能接受并执行外部的指令。当顾客选定商品并付款后, 自动贩卖机将释放商品给顾客,并不需要额外的人工介入。 __其实,对于开发者而言,智能合约就是一种程序,而且是不那么智能的程序。__ 智能合约的概念,最早由电脑科学家、密码学家Nick Szabo在 1994年提出, 不过当时并没有合适的环境实现,直到区块链特别是Vitalik创建以太坊以后, 智能合约的想法才开始逐渐落地。 & 如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: & &- [以太坊智能合约与DApp开发入门](http://xc.hubwiz.com/course/5a952991adbd1?affid=oschina7878) &- [以太坊去中心化电商DApp实战开发](http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6?affid=oschina7878) ## 为什么区块链是智能合约的理想环境?...
分页是Java Web项目常用的功能,昨天在Spring MVC中实现了简单的分页操作和搜索分页,在此记录一下。使用的框架为(MyBatis+SpringMVC+Spring)。 首先我们需要一个分页的工具类: 1.分页 import java.io.S
public class Page implements Serializable {
private static final long serialVersionUID = -3774660L;
private int pageNow = 1; // 当前页数
private int pageSize = 4; // 每页显示记录的条数
private int totalC // 总的记录条数
private int totalPageC // 总的页数
@SuppressWarnings("unused")
private int startP // 开始位置,从0开始
@SuppressWarnings("unused")
private boolean hasF// 是否有首页
@SuppressWarnings("unused")
private boolean hasP// 是否有前一页
@SuppressWarnings("unused")
private boolean hasN// 是否有下一页
@SuppressWarnings("unused")
日前,活字格 Web 应用生成平台发布 V4.0 版本,首次公开插件机制,强大的扩展性和系统集成能力,引起业内瞩目。 活字格是由西安葡萄城自主研发的 Web 应用生成平台,提供易用的类 Excel 可视化设计器和灵活的定制能力,帮助使用者以无代码或少写代码的方式,快速自主创建各类企业管理系统,如生产管理、进销存、项目信息管理、车辆设备管理、人事考勤管理、出差管理、会议室预定等,满足企业个性化管理需求,灵活方便,即改即用。 活字格具有强大的扩展性和系统集成能力: 开放的插件机制 在本次 V4.0 发布中,活字格全面公开插件接口,任何公司或个人都可以制作自己的插件来解决一些操作上的不便或增加新的功能,实现真正意义上的“即插即用”软件开发,扩展活字格平台的功能。活字格用户不仅可以使用到葡萄城官方插件,还可以享受到越来越多的第三方插件带来的便利。 支持 JavaScript 编程 使用活字格开放的编程接口,具有编程经验的用户可使用活字格平台自身和插件没有提供的功能,并用 JavaScript 代码来构建活字格的页面,并操作页面的元素,或进行复杂的数据操作。 支持系统集成 在提供完整的用户管理和权限角色管理功能的同时,活字格也支持单点登录,便于与企业的...
原文:Progressive Web Apps on iOS are here 作者:Maximiliano Firtman 在 iOS 11.3 版本中,苹果公司悄悄地增加了基于“渐进增强 Web 应用程序”(Progressive Web Apps,PWA)概念的新技术。本文带你看看 PWA 是如何工作的?它的能力和挑战是什么?以及如果你有已发布的 PWA 应用,那么你需要知道些什么。
这就是一个 PWA 应用,它能在 iPad 上全屏展示,并且具有离线功能,它也与 App Store 中的其它本地应用程序一样会出现在 iPad Dock 中 PWA 还没有一个确切的定义,总的来说,它是使用某种不需要打包或签名的 Web 技术创造出来的应用程序,可以离线运行,并且可以在运行的系统中选择性安装,它不论是从外观还是执行效果来看,都与一般应用程序无异。 PWA 应用在大多数平台上都不需要经过 App Store 流程,目前只有 Edge/Windows 10 强制 PAW 应用入驻商店。 也就是说在 iOS 平台上,你可以在没有 App Store 授权的情况下安装 PWA 应用。这可能是苹果公司一直没有向用户介绍这个新功能的原因之一,他们甚至都没有在 Safari 发布这个技术的公告,也许他们不想让用户产生疑惑。
你能指出 Google 地图原生应用和 PWA 版本的区别吗 谁创造了 PWA ? 其实,P...
在产品的个性化推荐、用户分析、聊天机器人等领域,人工智能展示出了它的强大之处。为了让人工智能真正落地,您需要用到一个非常可靠的机器学习框架,TensorFlow 将是您的不二之选。
利用SpringBoot作为微服务单元的实例化技术选型时,我们不可避免的要面对的一个问题就是如何实时监控应用的运行状况数据,比如:健康度、运行指标、日志信息、线程状况等等。本文就该问题做一点探索并记录试验过程
### 前言 ``` 在某些情况下,允许指定用户可以传输文件到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
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 # ...
![这里写图片描述](http://img.blog.csdn.net/05200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](http://img.blog.csdn.net/19115?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:.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. 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 选择 项目根目录 ```...
```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/charset=UTF-8"); response.getWriter().write("文件不存在或已过期,请重新生成"); } String fileName = URLEncoder.encode(path.substring(path.lastIndexOf("/") + 1), "UTF-8"); response.setContentType("text/csv"); response.setHeader("Content-Disposition", String.format(" filename=\"%s\"", fileName)); InputStream is = OutputStream os = try { is = new FileInputStream(path); byte[] buffer = new byte[1024]; os = response.getOutputStream(); 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...
### 文件列表 ``` 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配置 ``` worker_processes 1; events { worker_connections 1024; } http { include mime. keepalive_timeout 65; server { listen 8000; server_name 本机IP; location / { # 前两行是认证(可不加) auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd. # 路径 root /data/ # 首页 index index. } } } ``` ### 界面展示 ``` http://localhost:8000 ``` ###### 认证 ![这里写图片描述](https://img-blog.csdn.net/32301?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9idWRpbmcwMDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) ###### 播放器 ![这里写图片描述](https://img-blog.csdn.net/00537?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9idWRpbmcwMDc=/f...
### 前言 ##### 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* # 如果上条命令无效: # set @@max_allowed_packet=5* # 重启mysql service mysql restart # ubuntu service mysqld restart # centos ```...
## 更新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/15_added_entity_Overview.xml 将 changeSet中新增的三个column提取至新的changeSet中, 如下: 注意: changeSet的id不能与之前的相同 ``` ###### 4. 运行项目使配置生效 ``` 不需要手动修改MySQL,自动生效 ```...
## 1. Zuul 介绍 **Zuul** 在 **Spring Cloud** 微服务体系中担任很重要的角色--服务网关,是基于JVM的路由器和负载均衡器。 Zuul 的基本使用以及 **Filter** 的介绍就不在这说明了,本文主要介绍 Zuul 的原理。 ## 2. Zuul 处理流程 处理流程如下: ```Bash Request =& ZuulHandlerMapping =& ZuulController =& ZuulServlet ``` 主要的接收逻辑都在 `ZuulServlet` 中,执行 `Filter` 的逻辑,根据 Filter 的类型依次执行,如下代码: ```Java try { preRoute(); } catch (ZuulException e) { error(e); postRoute(); } try { route(); } catch (ZuulException e) { error(e); postRoute(); } try { postRoute(); } catch (ZuulException e) { error(e); } ``` 接收的代码已经清楚了,其实 Zuul 组件的功能就到这边了,剩下对请求进行路由其实主要使用了`Ribbon` 组件进行的,因此下面与其说是介绍 Zuul 到不如说是 `Ribbon` 的介绍。 路由的逻辑处理主要是 `route()` 即 `Route Filter` 进行的。 ## 3. Route Filter Zuul 中 `Route Filter` 有 `SimpleHostRoutingFilter` 和 `RibbonRoutingFilter`, 有人说还有 `SendForwardFilter`(本地的先不...
tio-websocket-server的首发教程,并且是以showcase的形式展现的----不仅仅是个教程,还是个可以放心使用的脚手架。
Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的生产效率。为Spring生态系统提供了一种固定的、约定优于配置风格的框架。 Spring Boot具有如下特性: 为基于Spring的开发提供更快的入门体验 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。 Spring Boot并不是不对Spring功能上的增强,而是提供了一种快速使用Spring的方式。 本文根据官方文档深入讲解一段代码 简单例子 Spring Boot建议使用Maven或Gradle,本文以Maven为例。 首先创建一个一般的Maven项目,有一个pom.xml和基本的src/main/java结构。 在pom.xml中写上如下内容: &?xml version="1.0" encoding="UTF-8"?&
&project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ma...
《复仇者联盟3》即将上映,我们也能够得知关于这部电影更多的信息,现在这部漫威巨制的制作成本终于有了消息。 根据报道,《复仇者联盟3》已经成为史上第二贵的电影。
由于文章直接放资源容易被删除…… ·关·注·薇·xin·公·众·号《午夜爱影视》 ,进·入·影·院·搜·索·片·名·观·看
谷雨已过,春日无多。转眼间,四月将尽。今年的春天似乎比往年来得迟,却又去得早。也许是因为这一场场的倒春寒不断来袭的缘故吧,我身边的四月并没有想象中的温暖和诗意,感觉这天气就像个淘气的娃娃一样,打打闹闹,时好时坏,阴晴不定,而我就像四月的云朵一样,追随着季节的脚步在时光的韵脚里起起落落。春光一直冷暖交替,这个四月跌跌撞撞,一路前行,却也不曾停息。
安静的午后,我把自己藏在一朵花的影子里,静静地看这红尘中盛世的喧哗,默默地聆听那一瓣一瓣落花的叹息。一花一叶总关情,一程花开,一程花落,我看到生命的轨迹是永远向前的,如此相似却又独一无二。
总是在四月,想起简祯,想起她的《四月裂帛》。总是在某个伤感的瞬间,想到那些烂熟于心的句子:“三月的天书都印错,竟无人知晓。四月的天空如果不肯裂帛,五月的袷衣如何起头。所有...
JVM,Tomcat,Nio,ajp
# 提出需求 实时统计业务系统(web,APP之类)的访问人数,即所谓UV,或者DAU指标. 这个需求怕是流计算最最最常见的需求了. 计算UV的关键点就在于去重,即同一个人访问两次是只计一个UV的.在离线计算中统计UV比较容易想到的方法就是用group或distinct机制来去重.但是在实时计算场景,还用group就不太科学了,一个是全量数据的group是比较费时的,第二个是全量数据的group是很费内存和CPU的.特别是当用户量巨大的时候,还要做到秒级更新就更难了. 总结起来,需求就是:海量用户场景UV实时计算. # 接受挑战 不难发现,问题的主要难点就是**去重**. Spark Streaming目前没有给出内置方案(这个其实可以有),但是海量数据去重问题早就有解决办法了. 所以Spark Streaming程序完全可以利用其他系统的现有方案解决去重问题,比如Redis. ## Redis的海量去重计数方案 ### Bitmap方案 所谓的Bitmap就是用一个bit位来标记某个元素对应的Value,比如ID为2的用户,就用第2个bit位来表示,然后用该位的值来表示该用户是否访问过.如果要计算UV,那就只要数一下有多少个1就行啦. 假设我们有40亿用户,使用Bitmap需要2^32个bit位,算下来也就500M左右. 你可能没想到的是,Redis中最常用的数据结构string,就可以实现b...
前言: 首先,最想说的是,当你要学习一套最新的技术时,官网的英文文档是学习的最佳渠道。因为网上流传的多数资料是官网翻译而来,很多描述的重点也都偏向于作者自身碰到的问题,这样就很容易让你理解和操作出现偏差,最开始我就进入了这样误区。官网的技术导读真的描述的很详细,虽然对于我们看英文很费劲,但如果英文不是很差,请选择沉下心去读,你一定能收获好多。我的学习是先从Spring boot开始的,然后接触到微服务架构,当然,这一切最大的启迪还是感谢我的一个老师,是他给我指明了新的道路,让我眼前一亮,再次感谢。 Spring 顶级框架 谈及微服务,作为当前主流的企业框架Spring,它提供了一整套相关的顶级项目,能让开发者快速的上手实现自己的应用,今天就介绍下Spring旗下各个顶级项目: Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在工作了。 Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。 Spring Framework:即通常所说的spring 框架,是一个开源的Java/Java...
首先,我们需要在vue工程中安装video.js相关依赖。 npm install --save video.js
npm install --save videojs-contrib-hls 然后,我们需要引入videojs的css文件,例如在main.js中引入 import 'video.js/dist/video-js.css' 接着,我们在需要播放视频的页面引入js对象 import videojs from 'video.js'
import 'videojs-contrib-hls' 指定一个video容器,例如: &video id="my-video" class="video-js vjs-default-skin" controls preload="auto" poster="../assets/video.png"&
&source src="http://127.0.0.1:7086/aaa/213/stream/1.m3u8" type="application/x-mpegURL"&
&/video& 最后,我们在mounted节点初始化播放器: videojs('my-video', {
bigPlayButton: false,
textTrackDisplay: false,
posterImage: true,
errorDisplay: false,
controlBar: true
}, function () {
this.play()
}) 以上就是如题最简单的实现,更多需求请自行阅读video.js相关api或者持续关注此博客。...
Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运行jar包。 传统的Spring应用程序需要配置大量的XML文件才能运行,而使用Spring Boot只需极少的配置,就可以快速获得一个正常运行的Spring应用程序,而这些配置使用的都是注解的形式,不需要再配置XML。 与Go语言的应用不同,我们知道所有的Java Web应用都必须放在Servlet容器中(不是像Docker容器的那种容器),如Tomcat、Jetty等。Servlet容器被定位为托管Web应用程序的高可用组件,关于Servlet的教程请参考Servlet教程 | runoob.com。 使用Java构建微服务并发布到Kubernetes平台 Java作为多年的编程语言届的No.1(使用人数最多,最流行),使用它来构建微服务的人不计其数,Java的微服务框架Spring中的Spring Boot和Spring Cloud已成为当前最流行的微服务框架。 下面是Sping技术栈所包含的技术框架图。 当然,如果在Kubernetes中运行Java语言构建的微服务应用,我们不会使用上图中所有的技术,本节将主要讲解如何使用Spring Boot构建微服务应用。 下图是Spring Boot的一些知识点。 Spring Boot是...
## 简介 Spring Boot是Spring提供的一套基础配置环境,可以用来快速开发生产环境级别的产品。尤其适合开发微服务架构,省去了不少配置麻烦。比如用到Spring MVC时,只需把`spring-boot-starter-web`依赖添加到Maven依赖中即可。另外它还有如下特性: - 创建独立的Spring项目 - 内置Tomcat, Jetty,Undertow - 初始POM配置文件以简化Maven配置 - 尽可能的自动配置Spring - 提供生产环境功能,如统计,健康检查和外部配置 - 无需XML配置和代码生成 ## 创建 Spring Boot 应用 * 开发环境:IntelliJ, JDK 1.8 * 项目源代码 [Gitee](https://gitee.com/zxuqian/Spring/tree/master/helloworld) 首先在IntelliJ中创建一个maven项目: - GroupID: cn.zxuqian - ArtifactId: helloworld 创建完成后IntelliJ右下角会提示自动导入Maven配置,选择Enable Auto-Import来启动自动导入。然后在pom.xml添加入下代码: ``` xml 4.0.0 cn.zxuqian helloworld 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASE org.springframework.boot spring-boot-starter-web 1.8 org.springframework.boot spring-boot-maven-plugin ``` `` 标签添加了`spring-boot-star...
添加索引报错 1215 - Cannot add foreign key constraint
写在前面 不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。 然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器接网线敲shell命令,这不是我想要的运维人生”。 我也是一位程序员,所以我希望通过以下基于程序开发的一些例子,帮助大家解决这些困惑。大道理是相通的,测试、运维都可以借鉴。 几个典型的误区 拜大牛为师 有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。 我个人是反对这种方法的,主要的原因有几个: 1. 大牛很忙,不太可能单独给你开小灶,更不可能每天都给你开1个小时的小灶;而且一个团队里面,如果大牛平时经常给你开小灶,难免会引起其他团队成员的疑惑,我个人认为如果团队里的大牛如果真正有心的话,多给团队培训是最好的。然而做过培训的都知道,...
在有效率的情况下,如何把质量做到最好?
### logstash log出现 ``` 01:44:50.412 [[main]&worker14] INFO logstash.outputs.elasticsearch - retrying failed action with response code: 429 ({"type"=&"es_rejected_execution_exception", "reason"=&"rejected execution of org.elasticsearch.transport.TransportService$7@45d0f0be on EsThreadPoolExecutor[bulk, queue capacity = 100, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@6bf39a64[Running, pool size = 32, active threads = 32, queued tasks = 60, completed tasks = 7071143]]"}) ``` ### 说明 es 线程队列已满,不能再处理新请求了. ### 处理 1. 我先修改了es的jvm参数 -Xss1m -& Xss10m 2. elasticsearch.yml修改bulk.queue大小 thread_pool.bulk.queue_size: 100 .从默认60修改为100. 未能解决.logstash继续出log,这次的 queued tasks = 100. ### 再查询资料.可能是logstash发送速度过快导致. 1. 修改logstash.yml配置 默认 ``` # pipeline: # batch: # size: 125 # delay: 5 # ``` 改为 ``` pipeline.batch.size: 1500 pipeline.batch.delay: 200 ``` 重启logstash,没有这样日志出现了 参考资料: https://blog.csdn.n...
当34岁的扎克伯格、全球超级科技巨头中最年轻的创始人被迫就隐私事件前往美国国会接受议员们的轮番质询,当连接了超过十亿中国人、创造了无处不在的微信、一度拥有亚洲市值最高公司头衔的腾讯被质疑没有梦想时,似乎暗示了一个时代的结束:那个将杨致远、贝佐斯、佩奇、扎克伯格、马云、马化腾们视为偶像、给与特殊关爱的时代。
Android App常用图标尺寸规范
1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似。所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生。ReentrantLock 的主要功能和 synchronized 关键字一致,均是用于多线程的同步。但除此之外,ReentrantLock 在功能上比 synchronized 更为丰富。比如 ReentrantLock 在加锁期间,可响应中断,可设置超时等。 ReentrantLock 是我们日常使用很频繁的一种锁,所以在使用之余,我们也应该去了解一下它的内部实现原理。ReentrantLock 内部是基于 AbstractQueuedSynchronizer(以下简称AQS)实现的。所以要想理解 ReentrantLock,应先去 AQS 相关原理。我在之前的文章 AbstractQueuedSynchronizer 原理分析 - 独占/共享模式 中,已经详细分析过 AQS 原理,有兴趣的朋友可以去看看。本文仅会在需要的时候对 AQS 相关原理进行简要说明,更详细的说明请参考我的其他文章。 2.原理 本章将会简单介绍重入锁 ReentrantLock 中的一些概念和相关原理,包括可重入、公平和非公平锁等原理。在介绍这些原理前,首先我会介绍 ReentrantLock 与 synchronized 关键字的相同和不同之处。在此之后才回去介绍重入、公平和...
简评:VSCode 是一个开源的跨平台编辑器,是我最满意的 IDE 之一。本文介绍了几种使用的插件,确实解决了很多的痛点。
cp /usr/share/zoneinfo/Asiz/Shanghai /etc/localtime
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 构建项目 使用maven创建springBoot 项目 目录结构 说明: src/main/resources 源文件目录,并在该目录下创建 application.properties 文件、static 和 templates 的文件夹。 application.properties:用于配置项目运行所需的配置数据。 static:用于存放静态资源,如:css、js、图片等。 templates:用于存放模板文件。 pom.xml中的配置如下: &?xml version="1.0" encoding="UTF-8"?&
&project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&
&modelVersion&4.0.0&/modelVersion&
&groupId&com.example&/groupId&
&artifactId&springboot&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&packaging&jar&/packaging&
&name&springboot&/name&
&description&Demo project for Spring Boot&/descri...
今天的Web开发与几年前完全不同,有很多不同的东西可以很容易地阻止任何人进入Web开发。这是我们决定制作这些循序渐进的视觉指南的原因之一,这些指南展示了更大的图景,并让任何人清楚了解他们在网页开发中扮演的角色。 & 这是我们决定制作这些循序渐进的视觉指南的原因之一,这些指南展示了更大的图景,并让任何人清楚了解他们在网页开发中扮演的角色。 ![插图](https://static.oschina.net/uploads/img/00750_Me4b.jpg "文章插图") 毫不迟疑,让我们开始吧。你可以在下面的图片中找到详细的路线图,但是我也将在下面的描述中解释每一步。 ![路线图](https://static.oschina.net/uploads/img/00815_sY4a.png "后端技术路线图") 我们来分解它,并解释下面部分中的每一步。 在我们开始之前,虽然我们没有在上面的路线图中列出 HTML/CSS 的知识,但建议您至少了解一些基本的 HTML/CSS 并了解如何编写基本的 HTML/CSS。 ## 第1步 - 学习一门语言 谈到选择语言有很多选择。我已经将它们分成几类,以便你更容易做出决定。对于刚开始进入后端开发的初学者,我建议你选择任何脚本语言,因为它们有很多需求,它可以让你快速起步。如果你有一些前端知识,你可能...
//不带参数的装饰器
function logClass(target: any) {
var original =
function construct(constructor, args) {
var c: any = function () {
return constructor.apply(this.args);
c.prototype = constructor.
return new c();
var f: any = function (...args) {
console.log("New:" + original.name);
return construct(original, args);
f.prototype = original.
//类装饰器,带有参数的
function logClass2(option:string) {
return function (target: any) {
console.log("option:"+option);
var original =
function construct(constructor, args) {
var c: any = function () {
return constructor.apply(this.args);
c.prototype = constructor.
return new c();
var f: any = function (...args) {
console.log("New:" + original.name);
原文地址:https://blog.csdn.net/qq_/article/details/
1. android studio正常的module引用aar文件需要配置如下:
[java] view plain copy repositories {
dirs 'libs'
// 此在android标签下添加
[java] view plain copy dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'aar名字', ext: 'aar')
2 . 当一个library类型的module需要引用aar文件时,也要在所在模块的build.gradle文件中加入上面的话 但是当一个A Module引用此library的module时,也需要在A的build.gradle中加入如下配置: [java] view plain copy repositories {
dirs 'libs', '../模块名/libs'
否则会报找不到aar的错误.
参考链接:http://blog.csdn.net/qq_/article/details/...
首先请先看下链接的这篇文章,了解下封装第三方组件 http://fly.layui.com/jie/5080/ 最近用到Echart图标插件,参考了上面这篇文章进行自己封装,发现了一些坑,现在分享给大家 这是文章中提到的「UMD 规范」写法 (function (window, factory) {
if (typeof exports === 'object') { // 支持 CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) { // 支持 AMD
define(factory);
window.eventUtil = factory();
})(this, function () {
// 模块源代码
//module ...
}); 现在需要添加对layui支持的判断,教程代码如下 } else if (window.layui && layui.define) {
layui.define('jquery', function (exports) { //layui加载
exports('fullPage', factory(layui.jquery, global, global.document, global.Math));
}); 仅需2行代码搞定 不过我们下载Echart源码版代码后发现,它的判断如下 (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ?...
```shell # 本人windows 系统 # 安装 git bash # 安装 nodejs # 安装后重启 git bash # 确认windows 中 nodejs 安装成功 win@2554n-PC MINGW64 ~ $ npm -v 5.6.0 win@2554n-PC MINGW64 ~ $ node -v v8.11.1 # 安装 ganache-cli win@2554n-PC MINGW64 ~ $ npm install -g ganache-cli npm WARN deprecated babel-preset-es.1: ? Thanks for using Babel: we recommend using babel-preset-env now: please read babeljs.io/env to update! npm WARN deprecated nomnom@1.8.1: Package no longer supported. Contact
for more info. C:\Users\win\AppData\Roaming\npm\ganache-cli -& C:\Users\win\AppData\Roaming\npm\node_modules\ganache-cli\build\cli.node.js npm WARN webpack-cli@2.1.3 requires a peer of webpack@^4.0.0 but none is installed. You must install peer dependencies yourself. + ganache-cli@6.1.0 added 632 packages in 58.269s # 启动 win@2554n-PC MINGW64 ~ $ ganache-cli Ganache CLI v6.1.0 (ganache-core: 2.1.0) Available Accounts ================== (0) 0x9d9f4a4b3dd394e3fc (...
HDFS主要是用于做什么的?
HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。 它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。 HDFS的优缺点比较 优点 高容错性 (1)数据自动保存多个副本。它通过增加副本的形式,提高容错性 (2)某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心 适合批处理 (1)它是通过移动计算而不是移动数据 (2)它会把数据位置暴露给计算框架 适合大数据处理 (1)处理数据达到 GB、TB、甚至PB级别的数据 (2)能够处理百万规模以上的文件数量,数量相当之大 (3)能够处理10K节点的规模 流式文件访问 (1)一次写入,多次读取。文件一旦写入不能修改,只能追加 (2)它能保证数据的一致性 可构建在廉价机器上 (1)它通过多副本机制,提高可靠性 (2)它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复 缺点 低延时数据访问 (1)比如...
Jenkins通过参数插件传参给maven,调用不同环境的资源文件进行自动化部署
1、 改表法。 可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" mysql -u root -p密码(初始化root用户没有密码); mysql&show databases; mysql& mysql&update user set host = '%' where user = 'root'; mysql&select host, 2、授权法。 例如,你想root使用pwd从任何主机连接到mysql服务器的话。 1、GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'pwd' WITH GRANT OPTION; 2、FLUSH
PRIVILEGES; 如果你想允许用户root从ip为192.168.1.6的主机连接到mysql服务器,并使用pwd作为密码 1、GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'pwd' WITH GRANT OPTION; 2、FLUSH
PRIVILEGES; 如果你想允许用户root从ip为192.168.1.6的主机连接到mysql服务器的XXX数据库,并使用pwd作为密码 1、GRANT ALL PRIVILEGES ON XXX.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'pwd' WITH GRANT OPTION; 2、FLUSH
PRIVILEGES; ==================================================...
- 工作流程:Forward-Propagation、Backward Propagation、Partial Derivatives、Hyper Parameters - 深度网络:A single layer Neural Network、Wide Neural Network vs Deep Neural Network - 维度诅咒、权衡
Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。 +----+-------+--------+-----------+
| Id | Name
| Salary | ManagerId |
+----+-------+--------+-----------+
| Henry | 80000
+----+-------+--------+-----------+ 给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。 +----------+
| Employee |
+----------+
+----------+ mysql脚本 Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, ManagerId int);
Truncate table E
insert into Employee (Id, Name, Salary, ManagerId) values ('1', 'Joe', '70000', '3');
insert into Employee (Id, Name, Salary, ManagerId) values ('2', 'Henry', '80000', '4');
insert into Employee (Id, Name, Salary, ManagerId) values ('3', 'Sam', '60000', null);
insert into Em...
http://storm.apache.org/releases/0.9.7/Guaranteeing-message-processing.html 本文是对Storm官方文档的翻译并结合了自己的一些理解。最后发现网络上已经有了很多的翻译版本,自己翻译收获还是不一样的。 文中可能会有翻译理解不到位的情况,还望不吝指教。另外在阅读本文前须要对storm的一些基本概念有所了解,包括spout,bolt,tuple,拓扑等
### lvm讲解 ``` DiskA 分区分别为Physical Volume1、Physical Volume2;DiskB 分区为Physical Volume3,在这里Physical volume1,2,3就是磁盘分区 也就是物理卷;然后由单个或多个物理卷组成物理卷组,最后在物理卷的基础上划分出逻辑卷,而逻辑卷格式化后挂载上就可以使用了 ``` #### 准备磁盘分区阶段 - fdisk /dev/sdb - 创建三个新分区,大小分别为2G - 改变分区类型为8e(fdisk中使用t更改类型) 1. 创建新分区 ``` //这里我创建了5个2G的分区,多出的2个留待测试用 [root@24centos7-01 /]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 //创建第一个分区 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (9,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (9,默认为 ):+2000M 分区 1 已设置为 Linux 类型,大小设为 2 GiB //创建第二个分区 命令(输入 m 获取帮助):n Partition type: p primary (1 primary, 0 ext...
I/O复用模型,是同步非阻塞,这里的非阻塞是指I/O读写,对应的是recvfrom操作,因为数据报文已经准备好,无需阻塞。说它是同步,是因为,这个执行是在一个线程里面执行的。有时候,还会说它又是阻塞的,实际上是指阻塞在select上面,必须等到读就绪、写就绪等网络事件。
今年6月25日至27日, LinuxCon + ContainerCon + CloudOpen(LC3)将在北京国家会议中心召开。本次会议针对开源技术在人工智能和深度学习、区块链、云原生、虚拟服务器架构和微服务、新兴技术、基础实施和自动化、IoT和M2M、KVM、Linux系统、网络编排等10大前沿领域的应用,邀请了全球数百位业界大咖,用三天时间、超过200场分享,从市场、技术、产业甚至整个生态层面,将做全方位的探讨。
**1.混淆工具版本** 本文使用的是ProGuard这一款Java代码混淆工具。 因为在我们实际的开发工作中,有些程序包含了公司核心产品的代码,所以为了保护自身的知识产权,避免程序包不小心外流出去,我们有必要进行一些保护措施,在程序开发完之后,需要将程序代码进行混淆。 本文使用的是ProGuard v5.3.3版本。 下载地址:http://www.jb51.net/softs/242707.html **2.混淆工具安装步骤** 2.1下载后的文件是一个压缩包: ![输入图片说明](https://static.oschina.net/uploads/img/41208_UU6w.png "在这里输入图片标题") 2.2 解压压缩包 ![输入图片说明](https://static.oschina.net/uploads/img/41219_crA0.png "在这里输入图片标题") **3.混淆工具使用步骤** 3.1 解压后,执行 bin目录下的proguardgui.bat ![输入图片说明](https://static.oschina.net/uploads/img/41328_A5vq.png "在这里输入图片标题") 执行proguardgui.bat后如图: ![输入图片说明](https://static.oschina.net/uploads/img/41356_BC65.png "在这里输入图片标题") 注意:执行proguardgui.bat后会出现一个cmd命令框,不要关闭,最小化即可。 3.2 点击左侧菜单栏中的...
**一、概述** 尽管被称为`Angular5`,实际上它只是这个诞生于2012年的前端框架的的第四个版本: ![angular history](http://xc.hubwiz.com/class/59de11dc6b2f7/img/angular-history.png) 看起来差不多半年就发布一个新版本,不过实际上从重写的版本`2`开始,开发 接口与核心思想就稳定下来了,并基本保持着与前序版本的兼容性。 在`5`这个新的版本中,`Angular`团队将改进重点放在以下特性方面: - 更易于构建渐进式`Web`应用 —— __P__rogressive __W__eb __A__pp - 使用构建优化器剔除无用代码,以获得更小的应用、更快的网络加载时间 - 使物化设计组件兼容服务端渲染 `PWA`是`Google`提出的一个标准,旨在让Web应用在移动终端上获得媲美原生 应用的用户体验。一个`PWA`应用主要利用`Service Worker`和浏览器缓存来 提省交互体验,它不仅可以直接部署在手机桌面,而且可以离线应用: ![pwa](http://xc.hubwiz.com/class/59de11dc6b2f7/img/pwa.png) **二、引入angular环境** `Angular`推荐使用`TypeScript`来开发应用,这要求使用一个在线 编译器(`JIT`)实时编译代码,或者在开发期采用预编译器(`AOT`)提前编译代码。 为了避免这个繁琐的过程影...
机械键盘的轴体选择是见痛苦的事,不知道哪款轴体是最适合自己的,我的第一部机械键盘是 IKBC C87 青轴。青轴使用了一年多,对机械键盘越来越了解,期间跟同事交换使用,体验机械键盘其他轴体茶轴和红轴,最终发现真正适合自己的是红轴。
在 1.8 的发布版本中,SIG Scheduling 通过引入 Pod 优先级和抢占特性扩展了共享集群的概念。这些特性允许在单一集群中混合运行不同类型的应用和任务,提高了集群的利用率和可用性。这些特性目前都是 alpha 版本。本文将对这一特性进行全面介绍,下一篇博文会从scheduler源码进行分析。
# jvm - 垃圾回收 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章中间和末尾处会有标注 ## **垃圾回收的意义** 它使得java程序员不再时时刻刻的关注内存管理方面的工作. 垃圾回收机制会自动的管理jvm内存空间,将那些已经不会被使用到了的"垃圾对象"清理掉",释放出更多的空间给其他对象使用. ## **何为对象的引用?** Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例 在java中,对引用的概念简述如下(引用强度依次减弱) : - **强引用** : 这类引用是Java程序中最普遍的,只要强引用还存在,垃圾收集器就永远不会回收掉被引用的对象 - **软引用** : 用来描述一些非必须的对象,在系统内存不够使用时,这类对象会被垃圾收集器回收,JDK提供了SoftReference类来实现软引用 - **弱引用** : 用来描述一些非必须的对象,只要发生GC,无论但是内存是否够用,这类对象就会被垃圾收集器回收,JDK提供了WeakReference类来实现弱引用 - **虚引用** : 与其他几种引用不同,它不影响对象的生命周期,如果这个对象是虚运用,则就跟没有引用一样,在任何时刻都可能会回收,JDK提供了PhantomReference类来实现虚引用 **如下为相关示例代码** ```j...
自从微服务概念以来,众多的软件架构在践行着这一优秀的设计理念。各自的系统在这一指导思想下收获了优雅的可维护性,但一方面也给接口调用提出了新的要求。比如众多的API调用急需一个统一的入口来支持客户端的调用。在这种情况下API GATEWAY诞生,我们将接入、路由、限流等功能统一由网关负责,各自的服务提供方专注于业务逻辑的实现,从而给客户端调用提供了一个稳健的服务调用环境。之后,我们在网关大调用量的情况下,还要保证网关的可降级、可限流、可隔离等等一系列容错能力。 一、网关 这里说的网关是指API网关,直面意思是将所有API调用统一接入到API网关层,有网关层统一接入和输出。一个网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,各个API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问题。 1.1、单体应用 单体应用.png
业务简单,团队组织很小的时候,我们常常把功能都集中于一个应用中,统一部署,统一测试,玩的不易乐乎。但随着业务迅速发展,组织成员日益增多。我们再将所有的功能集中到一个TOMCAT中去,每当更新一个功能模块的时候,势必要更新所有的程序...
## 写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出。 文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answershuto/learnVue)。 在学习过程中,为Vue加上了中文的注释[https://github.com/answershuto/learnVue/tree/master/vue-src](https://github.com/answershuto/learnVue/tree/master/vue-src)以及Vuex的注释[https://github.com/answershuto/learnVue/tree/master/vuex-src](https://github.com/answershuto/learnVue/tree/master/vuex-src),希望可以对其他想学习源码的小伙伴有所帮助。 可能会有理解存在偏差的地方,欢迎提issue指出,共同学习,共同进步。 ## Vuex 我们在使用Vue.js开发复杂的应用时,经常会遇到多个组件共享同一个状态,亦或是多个组件会去更新同一个状态,在应用代码量较少的时候,我们可以组件间通信去维护修改数据,或者是通过事件总线来进行数据的传递以及修改。但是当应用逐渐庞大以后,代码就会变得难以维护,从父组件开始通过prop传递多层嵌套的数据由于层级过深而显得异常脆弱,而事件总线也会因为组件的增多、代码量的增...
本文介绍ActiveMQ在SpringBoot中的使用,其中配置都基于注解
业务系统中,通常会遇到这些场景:A系统向B系统主动推送一个处理请求;A系统向B系统发送一个业务处理请求,因为某些原因(断电、宕机。。),B业务系统挂机了,A系统发起的请求处理失败;前端应用并发量过大,部分请求丢失或后端业务系统卡死。。。。这个时候,消息中间件就派上用场了--提升系统稳定性、可用性、可扩展性。 一、消息中间件 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 总体来说,消息中间件有以下作用:降低耦合、流量消峰(防浪涌)、可靠性传输、事件驱动 1.降低耦合:通过发布订阅的方式松耦合 我们以注册业务为例,注册成功会发送短信、邮件给用户来确认,传统架构模型是这样: 邮件业务和短信业务的代码是写在用户注册的流程里,无论是通过接口的方式来实现,还是远程调用的方式来实现,耦合度都很高,现在,新增一个需求,用户注册完成以后不发送邮件了,而是给用户“增加积分”,我们来分析这几种情况: 第一、都在一个业务系统内通过代码堆积、接口调用的方式来...
1行代码实现人脸识别,1. 首先你需要提供一个文件夹,里面是所有你希望系统认识的人的图片。其中每个人一张图片,图片以人的名字命名。2. 接下来,你需要准备另一个文件夹,里面是你要识别的图片。3. 然后你就可以运行face_recognition命令了,把刚刚准备的两个文件夹作为参数传入,命令就会返回需要识别的图片中都出现了谁,1行代码足以!!!
发现很多Kubernetes刚入门的同学对Kubernetes的Master高可用方案很感兴趣,官方又只给出了GCE上部署高可用的方案,因此我觉得有必要把我之前做的Kubernetes Master HA方案分享一下。
JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响,那么如何进行一次优雅的调优,提升应用的性能?
本文讲述了如何使用Jenkins来对项目持续集成,分别以Java和C#两类常见的项目类型做了演示。由于时间关系,仅仅简单讲述了如何配置和创建基本的持续集成项目。其实利用Jenkins除了上面演示的功能之外,还可以在构建完成后将失败或者成功的消息发邮件通知到相关人员,甚至自动部署到服务器(一般是部署到测试环境供QA测试,直接发布到正式服务器还是要慎重一点)。
标题是我以第一视角基于 Electron 开发客户端产品的体验,我将在之后分一系列文章向有兴趣的朋友一步一步介绍我是怎么从玩玩具的心态开始接触 Electron 到去开发客户端产品,最后随着业务和功能的复杂度提升再不断地优化客户端。
1、Eureka Server 提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。 2、Eureka Client 是一个Java 客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。 3、在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒),如果Eureka Server在多个心跳周期没有收到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除(
最近在项目中研究计步模块,主要功能记录当天步数,类似微信运动,支付宝计步,咕咚今日步数。 [本篇文章简书地址](http://www.jianshu.com/p/cfc2a200e46d)
[国内首家]以太坊区块链实战教学:http://edu.csdn.net/course/detail/6455 LinApex个人简介
奋斗在区块链网络在数字货币交易平台,底层框架设计,区块链钱包,区块链解决方案一线,做过人工智能,金融支付行业,目前正在做一款区块链+黄金的App系统。 玩赚区块链QQ群:
连载系列(基于以太坊)
1、【区块链】以太坊区块链技术初探
2、【区块链】以太坊区块链环境搭建
3、【区块链】以太坊区块链概念了解
4、【区块链】以太坊区块链技术进阶
1、【以太坊源码】编译以太坊源码,打造自己的公链私链
2、【以太坊源码】以太坊源码研究系列(以太坊模拟机、挖矿、点对点网络库、节点发现、合约代码传输、加密签名等)
区块链基本概念
区块链就是通过密码学的方式形成的一个由集体维护的分布式数据库。
区块链的概念最近很火,它来自于比特币等加密货币的实现,但是目前,这项技术已经逐步运用在各个领域。什么是区块链技术?为了感性认识这个问题,我们可以使用谷歌地球的例子做类比,ajax不是什么新技术,但组合在...}

我要回帖

更多关于 钉钉换手机打卡 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信