java中定时器的设置
在java后台开发中,我们常常会碰到一种需求:定时任务,比如超时取消未支付订单、定时推送通知(发送短信)、定时清理日志等等。这些需求在我们的开发中是随处可见的,但是往往对于一些特殊的需求不知道如何做,或者不知道如何设计。在这里我将它们分为三种:第一种是从时间点开始(已知起始时间点),到一定时长后触发(到达结束时间点)的任务,如超时自动取消;第二种是提前n时长的通知任务(定时任务);第三种是固定周期的任务,如每天的凌晨4点清理日志或数据等。下面我们针对这三种作具体分析。一、n分钟后触发(订单超时自动取消)需求:订单下单后,30分钟内未付款的订单将自动取消分析:起始时间点已知,时长设置已知,推算出来触发时间点解决方案:通过rabbitmq的延迟队列实现,其原理主要是通过TTL和DeadLetterExchange实现的。具体可查看https://www.cnblogs.com/haoxinyue/p/6613706.html,在这里不再赘述。要注意的是,一个TTL队列,其中的
函数与容器
【编者的话】ChadArimura是Iron.io公司的前创始人和CEO,现在是Oracle的软件开发副总裁,也是一个程序员。他在这篇文章中从多个维度将目前炙手可热的函数与容器做了对比以及进一步的阐述。容器和函数现在“非常热”,但是两者之间的区别究竟是什么?我最近一直在谈这个话题,很明显,这里没有简单的答案。在这篇文章中,我会尝试回答这个问题,并且至少我们可以推进这个话题,以便更好地理解容器和函数是如何相互关联的。让我们从一些宽泛的定义开始:定义容器:按照Docker的网站所说的:“容器镜像是一个轻量级的、独立的、可执行的软件包,包括运行所需的所有东西:代码、运行时、系统工具、系统库和环境设置。”函数:函数是代码块,在理想的情况下是小而单一用途的。在Serverless的上下文环境中,它们由函数即服务(FaaS)平台协调和调度,这些平台包括诸如AWSLambda、AzureFunctions和GoogleCloudFunctions之类的商业服务或者一些开源项目比如Fn项目(我们的项目)、
【SonarQube】使用Docker来快速启动
SonarQube作为静态代码检查工具,适用于Java/PHP/C#/JavaScript等的语言,可以说是相当通用。而对于部署安装来说,采用Docker的集成化部署方式自然是最快的。这里罗列一下供各位看官快速上手。1、试用SonarQubedockerrun-d--namesonarqube-p9000:9000-p9092:9092sonarqube之后在浏览器里打开http://localhost:9000/即可打开界面试用了,管理员用户名、密码为admin2、线上真实环境同样可以用Docker真实环境需要将数据库落地,可以用Docker启用一个MySQL实例,如下(注意替换路径)dockerrun--namemysql-sonar-eMYSQL_ROOT_PASSWORD=mysql-eMYSQL_DATABASE=sonar-eMYSQL_USER=sonar-eMYSQL_PASSWORD=sonar-v/path/to/local/mysql/dir:/va
MySQL数据导入导出乱码问题
场景程序使用gbk编码,表使用的是latin1编码,而我再一次倒入数据的操作中使用了utf8的终端,指定--default-character-set='latin1'倒入的数据是乱码,而后来将终端换成gbk之后酒倒入成功了通过变换插入数据的终端,模拟我们平常需要倒入数据的终端通过变更查询数据的终端,来模拟我们程序的查询操作default-character-set变更能够正确的读取中文字符测试环境mysqlserver和Linux是utf8的字符集使用xshell作为终端进行输入建立一张表存储字符集是latin1使用mysqlclient进行插入和查询,查看查询到的数据是否正确实验步骤使用mysqlclient,--default-character-set='latin1'这个选测进行测试,看看他到底改变了那些字符集,如下图所示[root@5kh4z42goufu]#mysql-usuperdba-padmin-S/tmp/mysql3443.sock-e'showvariableslike"%char%"
ACMUG年会,腾讯云揭秘TXSQL内核建设之路
2017年12月9日至10日,腾讯云受邀参加国内MySQL技术领域影响力最大的技术盛筵—ACMUG年会。腾讯云数据库专家张青林在会上分享了腾讯自研MySQL分支-TXSQL的经验。张青林一直专注于MySQL内核开发和相关架构工作,服务于腾讯公司自研产品业务和腾讯云业务。本次分享主要从性能优化、企业级特性和线上稳定性等多个维度进行详细的介绍,并且对TXSQL在未来的发力点进行了阐述。作为腾讯规模最大的MySQL数据库服务,CDB在腾讯云上也是最受欢迎的关系型数据库产品。CDB不仅具备备份回档、监控、快速扩容等数据库运维的全套解决方案,而且拥有深度定制的内核版本TencentMySQL,简称TXSQL。TXSQL内核版本拥有更高的性能、更强的稳定性,同时提供OracleMySQL企业级版本才拥有的特性,对内支持集团内部业务的发展,对外提供强有力的竟争力,助力腾讯云的快速奔跑。TXSQL在腾讯云CDB中所处的模块和作用以及TXSQL的发展,既是为了解决腾讯云日益增长的规模以及各行各业对数据库不断
Ubuntu下MySQL主从复制笔记
一:测试环境介绍主从复制测试环境是Ubuntu+MySQL主5.7,master服务器ip是192.168.71.135,slave服务器ip是192.168.71.137,Ubuntu环境是从一台已配置好环境的服务器克隆的。二:mysql主从配置1:)master配置a在mysql目录下(/etc/mysql),mysql.cnf文件中添加server-id和Log-bin.主从服务器的server-id不能相同log-bin=mysql-binserver-id=100设置好后,使用showmasterstatus;查询一下状态设置从服务器连接的账号,密码等配置连接用户GRANTREPLICATIONSLAVEON*.*to'mysql账号'@'%'identifiedby'密码';这里是测试,没有指定从服务器的ip.如需指定ip,执行下面一个指令GRANTREPLICATIONSLAVEON*.*to'mysql账号'@'192.168.71.
vue-cli 中使用 TypeScript
学以致用,这篇文章是对在vue-cli中使用TypeScript的一次小结。环境npm//typescriptnpminstalltypescript--save-dev//ts-loadernpminstallts-loader--save-devwebpack.base.conf.jsmodule.exports={//修改入口文件entry:'./src/main.ts',//引入ts/tsx文件时不必后缀resolve:{extensions:['.js','.vue','.json','.ts','.tsx'],alias:{'vue$':'vue/dist/vue.esm.js','@':resolve('src'),}},module:{//对ts使用ts-loader{test:/\.tsx?$/,exclude:/node_modules/,use:["babel-loader",{loader:"ts-loader",options:{a
读懂源码:一步一步实现一个 Vue
源码阅读:究竟怎样才算是读懂了?市面上有很多源码分析的文章,就我看到的而言,基本的套路就是梳理流程,讲一讲每个模块的功能,整篇文章有一大半都是直接挂源码。我不禁怀疑,作者真的看懂了吗?为什么我看完后还是什么都不懂呢?事实上一个经过无数次版本迭代的框架源码并不适合初学者直接阅读,因为里面有太多细节,太多噪点,太多枝枝蔓蔓。要想真正理解框架的核心逻辑,必须剥茧抽丝,还原出一个纯净的雏形。如同jQuery最早的版本只有六百多行,我相信Vue的核心功能也只需要几百行就能实现。所以,读懂源码的标志就是还原,码越薄,真相就越清晰。如何还原雏形?一开始我设想的还原过程就是先删后拆。什么报错信息、参数校验、非核心功能全部砍掉,八千行变成了五千行。然后再拆,按功能模块将一个Vue.js拆分成util.js,observer.js,watcher.js…理想状态下,我应该能够理解源码了吧,可做完解剖手术后,我发现里面的逻辑依然纷繁复杂,剪不断,理还乱,草蛇灰线,伏脉千里,即便换了一个更早期更简短的版本,仍然很快又陷入了永
「前端」尚妆 UI 组件库工程实践(weex vue)
尚妆大前端团队使用weex进行三端统一开发有一段时间了,截止本文发表「达人店」APP大部分页面都已经用weex进行了重构,在此期间也积累了一些基础组件和业务组件。之前维护组件的方式是在达人店项目的工程内维护一个components文件夹,随日常开发迭代,并行需求与开发人员的增多,这种维护方式也暴露出一些问题。1、开发人员可以随意跟随需求开发修改components内的组件,破坏约定好的规范,或埋入bug。2、定义组件缺少规范,比如在某个需求开发中,A开发人员觉得这个功能可以抽离成组件,就直接在components内定义并使用,但实际却是伪需求,用了一次就再也没有人使用,造成components组件库的部分冗余。3、组件抽离过程无法协同使用,比如A开发同学切了个特性分支feature/A,并根据项目抽了个通用组件ComponentA,B开发切了个特性分支B,也想使用这个ComponentA组件,但此时两人在不同分支,代码并不能共享。4、。。。基于上述不便之处
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
Vue2.x+Webpack3.x+Nodejs多页面项目框架(上篇——纯前端多页面)@(HTML/JS)一般来说,使用vue做成单页应用比较好,但特殊情况下,需要使用多页面也有另外的好处。例如手Q的多webview架构,新开页面有利于ios右划返回,也避免了返回时页面的刷新。所以,这里我们探讨一下如何配置实现多页面的项目框架。这里是开篇,先以最简单的纯前端多页面为例入手,最终目标是完成Node.js多页面直出+前后端同构的架构。本文源代码:https://github.com/kenkozheng/HTML5_research/tree/master/Vue-Multipages-Webpack3本文目录,也是实现纯前端多页面的步骤vue-cli创建框架分析原型项目配置多页面化改造1利用vue-cli搭建基本的框架vue-cli是官方提供的脚手架工具,快速建立原型项目。安装vue-cli:npmi-gvue-cli初始化项目:vueinit
用 Angular 弄了一个背单词的网站——eliseos.org
登录用Angular弄了一个背单词的网站——eliseos.orgAxurez9hoursago弄了一个背单词的网站——eliseos.org,或者叫jingtu.io。(这俩名字其实是一个意思。当然这个网站不主要是为了背单词而开发的,不过目前只有背单词的还能用。)它是Angular开发的,同时用了一些时新的技术,比如前端的redux-observable,graphql,apolloclient,后端的inversify,sequelize-typescript,另外我还自己搞了一些用于自动生成graphqlschema的decorator——@TableexportclassLanguageextendsNoPrimaryOrdinaryModel
Gulp 工作流中Sass 增量编译功能的探索
大约是上一年的这个时候,因为项目合并来到了新的项目组中。虽然协作的同岗位同事也是同一个组的,但使用的Gulp工作流却有些不一样。第一天做项目需求的时候,就遇到了一件让我瞠目结舌的事情:这里的Sass编译一次居然要10s以上。有用过Sass这类CSS预处理器都知道10s+意味着什么,你每保存一次.scss文件,都必须等上10s以上才能看到你所改动的效果。如此一来十分尴尬,因为你直接写原生的CSS语法比这还快。让我更加惊讶的是当时的项目组相关同事已经用了这套工作流快一年了,却居然能一直默默忍受这种编译速度。后面的故事倒有些题外话了,简单概括是我在接下来的半年发挥了一些“主观能动性”将整个工作流做了一番优化。其中涉及到的就是本文所言的在Gulp工作流中Sass增量编译功能的探索。初级玩家的玩法Gulp工作流中集成Sass编译一般都是用gulp-sass这个模块,本质上gulp-sass调用的是node-sass(C++版的Sass)。熟悉Gulp的都知道,默认的话Sass中都是全
过渡与动画 - 缓动效果之弹跳动画
过渡与动画-缓动效果之弹跳动画2017-12-1021:35byOkayChen,...阅读,...评论,收藏,编辑难题给过渡和动画加上缓动效果是一种常见的手法(比如具有回弹效果的过渡过程)是一种流行的表现手法,可以让界面显得更加生动和真实:在现实世界中,物体A点到B点往往也是不完全匀速的以纯技术的角度来看,回弹效果是指当一个过渡达到最终值时,往回到一点,然后再次回到最终值,如此往复一次或者多次,并逐渐收敛,最终稳定在最终值。有相当的多JavaScript类库可以创建动画,且内置回弹效果等其他缓动效果。但是眼下,我们其实已经不需要借助脚本来实现过渡和动画了。不过,在CSS中实现回弹效果的最佳方式是什么呢?弹跳动画我们的第一感觉可能就是使用css动画,并且设置如下关键帧:@keyframesbounce{60%,80%,to{transform:translateY(350px);}70%{transform:translateY(250px);}90%{transform:translateY(300px
WebSocket简介
好多小伙伴对websocket都不怎么了解,甚至是闻所未闻,本篇文章将简单的介绍一下websocket。当然,websock的并不能解决我们面临的所有问题,一个稳定的在线判断,长链接框架,写起来也是有很多问题要继续处理的。贴一下Java-WebSocket链接WebSocket是什么?在Google上搜索WebSocket,会得到一下解释:WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。WebSocket通信协议于2011年被IETF定为标准RFC6455,WebSocketAPI被W3C定为标准。在WebSocketAPI中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。其实简单的说,Websocket就是一个全双工通信协议.准确的说,是一个全双工的应用层网络协议.为什么要有WebSocket?不需要回答太多,因为我们需要一个全双工的便于使用的应用层网络协议.有人说,Socket也是
File Img Canvas的操作总结
记录下工作中对于H5的FileAPI使用和一些常见的操作图片压缩前端本地客户端压缩图片,兼容IOS,Android,PC、自动按需加载文件需要lrz.all.bundle.jsgithub:localResizeIMG演示地址:localResizeIMG使用这个插件的最大好处是解决了文件上传图片时候如果是IOS直接拍照上传会有90度旋转的毛病使用varfile=this.files[0];//设置压缩参数lrz(file,{'width':300,'height':300,'quality':0.6}).then(function(rst){console.info(rst);//图片上传到服务器vardata=newFormData();data.append('file',rst.file);$.ajax({url:'upload',method:'post',dataType:'json',data:rst.formData,contentType:fal
基于 HTML5 Canvas 的 3D 碰撞检测
这是公司大神写的一个放官网上给用户学习的例子,我一开始真的不知道这是在干嘛,就只是将三个形状图元组合在一起,然后可以同时旋转、放大缩小这个三个图形,点击“Animate”就能让中间的那一个图元单独绕着某一个点旋转,表单最上方的“Axis”真的完全不知道拿来干嘛用的,觉得好累赘,而且是官网的Demo,也没有解释。。。所以我今天得任务就是完全剖析这个例子!奋斗本文例子:http://www.hightopo.cn/demo/3drotate/3d-rotate.html首先让我们来看下这个案例:我们来看看如何操作这个3d交互模型,可以直接滑动“Rotation”的滑动条,你会看到3d和左下角的2d上的图元都会旋转,接着点击“Axis”中的任意一个值,然后点击“Animate”,你会看到中间这个图元会旋转,同时滑动“Range”的滑动条,这是控制你旋转的幅度的,如果你调到“0”,那么就不会旋转,调到“30”就会旋转30度,以此类推。接着调整“Reset”你会发现,不是完全刷新这个界面,而是局部刷新两边的圆柱,根据这两个圆
[WPF]本地化入门
1.前言WPF的本地化是个很常见的功能,我做过的WPF程序大部分都实现了本地化(不管最终有没有用到)。通常本地化有以下几点需求:在程序启动时根据CultureInfo.CurrentUICulture或配置项显示对应语言的UI。在程序运行时可以动态切换UI语言(无需重启程序)。制作对应不同语言的安装包。通过下载语言包实现多种语言的本地化。其中只有第一点是必要的。第二点最好也可以实现,很多时候切换语言只为了看看某个专业术语在英语中的原文是什么,或者临时打印个英文报表,平时使用还是用中文,用户不想为了这点重启程序。第三点和第四点虽然很常见,但我从来没实现过,毕竟文字资源(有时还有少量图片)占用的空间不会太多,大部分WPF程序都没有大到需要考虑安装包大小,所有语言的资源全部打包进一个安装包就可以了。WPF本地化技术很成熟,也有几种方案,微软在MSDN给出了详细的介绍WPF全球化和本地化概述,还有一份古老的文档WPFLocalizationGuidance,整整66页,里面详细介绍了各种WPF本地化的机制。本文只介绍两种实现以
vue-cli 中使用 TypeScript
学以致用,这篇文章是对在vue-cli中使用TypeScript的一次小结。环境npm//typescriptnpminstalltypescript--save-dev//ts-loadernpminstallts-loader--save-devwebpack.base.conf.jsmodule.exports={//修改入口文件entry:'./src/main.ts',//引入ts/tsx文件时不必后缀resolve:{extensions:['.js','.vue','.json','.ts','.tsx'],alias:{'vue$':'vue/dist/vue.esm.js','@':resolve('src'),}},module:{//对ts使用ts-loader{test:/\.tsx?$/,exc
搜集React、Vue、Angular和传统UI组件库以及后台管理平台模板
快来Star,在这里哦AwesomeUIKit。ReactReactbasedcomponentlibrary.UIW-AhighqualityUIToolkit,AComponentLibraryforReact.ANTDESIGN-AUIDesignLanguage.OfficeUIFabric-Theofficialfront-endframeworkforbuildingexperiencesthatfitseamlesslyintoOfficeandOffice365.AmazeUIReact-AmazeUIcomponentsbuiltwithReact.js.Blueprint-BlueprintisaReact-basedUItoolkitfortheweb.ElementReact-AcollectionofessentialUIcomponen
程序员为什么加班太多?有可能是代码写得烂
程序员往往渴望加入的是一支“30%的时间在写代码,而70%的时间在喝着咖啡讨论着如何将产品做好”的团队。软件工作应该成为一项技术和艺术融合的高智力活动,而项目经理应该是一个高度理解质量、范围和进度客观规律的明白人,“高效工作,快乐生活”才应该是程序员的座右铭。原文地址:http://www.techug.com/post/work-overtime-and-write-bugly-code.html可现实情况却是,团队在一边超负荷的做着需求,一边改着没完没了的Bug。过点前夕,项目经理熬着通红通红的眼睛盯着我们整晚整晚的加班,质量专员一遍一遍的催促质量数据还不够,软件工作已经无可挽回的沦落成了体力劳动,别说快乐生活,生活都没了。好吧,以上可能都对,项目经理和质量专员是一个不懂客观规律并且毫无同情之心的大魔头,让我们程序员们毫无尊严卑贱的活着。只是,有句话憋了很久了:“醒醒吧,所有的这些,都是因为你的代码写的太烂,你制造了太多的Bug!”。你可能会抱怨这分明是需求变更太快,领导计划太紧导致的。嗯,听着挺有道理,但是要知道需求变更本身