开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

您想参观体验IBM的创新中心,切身体会技术给时代带来的改变么?”

本次活动还特别设有实机操作环节,由IBM的技术大咖带领开发者在短时间内迅速上线人工智能应用。另外在最后,大家还可以参观体验IBM的创新中心,切身体会技术给时代带来的改变。
IBM技术沙龙

自定义的Troop<T>泛型类(qt c++, java和c#的实现源码)

Troop是一个泛型列表操作类,适用于非高性能和非大数据量的要求。包括了:取值get,赋值set,追加append,插入insert,清除remove,进队enqueue,出队dequeue,交换swap,滚动roll, 进栈push,出栈pop等日常操作。
白首太玄經 发布于 19小时前 阅读 54

处处蚊子咬,绑定事件知多少?

> 接上回,上次的更改小x经理很满意,但是提出了几点意见。 她是这样说的: - 系统本地留log没必要弄个类,太麻烦了,日志也不需要记录具体人,有个时间即可。 - 管理员就一个人,不要用静态方法。 经理一定是处女座的,好吧,她的要求是对的,每个事件都是具有自己的用意,有的是一个对象,有的是系统级别,有的是一类东东,看来我要先复习一下yii的事件都能绑定什么了? # yii事件支持的绑定 前面说过yii一共能绑定四种类型的函数,分别是 - 全局函数 - 类的静态函数 - 对象的方法 - 匿名函数 **支持的函数理解很简单,难在使用场景,这是我们要思考的。** 针对小x经理说的第一个问题,我似乎用一个匿名函数就可以搞定了,于是我改了app\controllers\UserController.php 中对于OLog的绑定逻辑 ```php use yii\web\User; class UserController extends Controller { public function __construct(){ // 绑定事件 $this->on(User::EVENT_AFTER_LOGIN,function($event){ $time = date("Y-m-d H:i:s"); Yii::info("有人在{$time}登陆了"); }); $this->on(User::EVENT_AFTER_LOGIN,['app\models\Admin','sendMail']); $this->on(User::EVENT_AFTER_LOGIN,['app\models\User',...
阿北2017 发布于 23小时前 阅读 96 评论 2

YII2 RBAC规则与源码分析

YII2 RBAC 规则细说 我们新建这样的规则 我们在yii2 admin中添加以上规则 然后我们新增一个测试的权限,写个规则名字 并把这权限赋给要测试用户 我们用这用户登录后,运行/site/about,当然用户需要有site/about的权限 这里我们可以通过传的参数作为规则的运行参数,本身用户是有chgfhg权限的,但参数限制了用户是否有这权限,当规则返回true时,用户有权限,反之不行。 我们再看看官方文章 首选这里有author有$updateOwnPost权限,但这个权限绑定了规则,所以运行时受到规则约束 updatePost为updateOwnPost的后代 官方检测权限updatePost,本身没有这个直接的权限,但我们有updateOwnPost,yii2的RBAC是以递归方式一层层检测权限,(在没有规则的情况下)我们当前拥有updateOwnPost(我们可以看成我们拥有某个修改文章的角色,而updatePost又是这角色的子孙), 这是约束,如果返回TRUE我们就可以修改文章了
303650172 发布于 1天前 阅读 154 评论 1

学了两年半,Yii2的内置事件知多少?

> 书接上回,我将代码提交到服务器后被小X经理一顿批,她是这样说的。 ```php 小X: 你丫不知道yii2自己就有登陆后的事件么? 我:不知道啊,咋的吧? 小X:改!😡😡😡😡,然后统计个yii2预定义事件表给我。 我:哦,好的。😱😱😱 ``` 好吧,算咱技术不到家,那就赶紧改吧,先回顾下上一篇我都干了啥,我是在会员登陆后触发了一个事件,既然说有内置的,那就找找吧。 我知道登陆功能是使用yii\web\User这个类,那应该去那里去找它们。它在@app/vendor/yiisoft/yii2/web/User.php @@nai8@@ # 5分钟以后~ 果然,我找到了那个事件,还用了3分钟分析了如何使用,现在把我的研究成果和大家分享下。 对于yii2系统的登陆,yii\web\User类一共提供了4个事件,如下 ```php const EVENT_BEFORE_LOGIN = 'beforeLogin'; const EVENT_AFTER_LOGIN = 'afterLogin'; const EVENT_BEFORE_LOGOUT = 'beforeLogout'; const EVENT_AFTER_LOGOUT = 'afterLogout'; ``` 分别是登陆前后、注销前后,我要使用的是EVENT_AFTER_LOGIN事件,那么如何去使用那? 既然是登陆,还是先看下yii\web\User中的login方法,看看是否有蛛丝马迹 ```php public function login(IdentityInterface...
阿北2017 发布于 3天前 阅读 420 评论 2

重复性管理——从泛值到泛型以及泛函(下)

在前面我们谈论了重复性管理上的一些具体做法,重点探讨了泛型范式和泛函范式在解决重复性问题上的应用。因为前面的篇幅有很多被具体的代码例子占据了,所以留到现在这篇做一个归纳总结。 与数学的渊源 应该说,编程与数学还是颇有渊源的,或者说它们之间有很多相通的地方。数学的一个突出特点,那就是数学家总是在不断寻求更加一般化的表述,更为抽象的表达。我们来看一个具体的例子。 数学上有所谓的勾股数,最知名的就是我们所熟知的“勾三股四玄五”了。具体而言就是 3^2 + 4^2 = 5^2. 注:3^2 表示 3 的 2 次方(平方),因为上标较为麻烦,其余类似。 类似的正整数组合还有比如:5^2 + 12^2 = 13^2. 显然,我们都知道这些都是勾股定理的一些正整数特例而已,数学家们肯定不会只满足与此,很早他们就发现了所有的直角三角形都满足一个一般化的表达如下: a^2 + b^2 = c^2. 这就是所谓的“勾股定理”了。 在西方,叫“毕达哥拉斯定理”(Pythagorean theorem) 那么,是否到这里,事情就结束了呢?如果你还记得曾经学过的数学,那么你应该还记得有个东西叫“余弦定理(law of cosines)”,具体如下: 当角度 γ 为 90 度时,因为 cos(90) = 0,这样“余弦定理”就简化...
国栋 发布于 3天前 阅读 168 评论 3

关于消息变更的最佳实践

java 观察者模式 消息变更
xpbob 发布于 4天前 阅读 216

如何使用Kotlin开发微服务

谷歌在5月18号的I/O开发者大会上,宣布将Kotlin语言作为安卓开发的一级编程语言。可能很多人这时第一次听说这门语言。我了解这门语言时间也不长,在今年的一个内网帖子上第一次看到这门语言。今天我们来了解一下Kotlin这门语言和如何使用Kotlin开发微服务 ### Kotlin简介 > Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言,其名称来自于圣彼得堡附近的科特林岛。 以上是维基百科上对于Kotlin的介绍。Kotlin是JetBrains的开发团队设计的基于JVM运行的一门编程语言。 Kotlin的诞生时间并不长,Kotlin的开发始于2010年,在2016年发布第一个正式版本1.0。它吸收了包括C#、GO等新兴语言的特性。虽然它在语法上和Java不兼容,但是它在设计时就考虑和Java的代码相互调用,并且可以复用Java现有的类库。 ### 使用Kotlin进行服务端开发 Kotlin非常适合服务端开发,同时Kotlin在设计时就考虑了和Java技术栈的完全兼容,所以对于Java开发者来说,非常容易上手。Java语言设计在90年代,由于Java社区的复杂性,导致Java的特性发展明显落后于其他语言。使用Kotlin可以既享受到...
wangyan9110 发布于 4天前 阅读 617 评论 19 点赞 1

Laravel源码入门-启动引导过程(九)RegisterFacades

上文介绍了 HandleExceptions,在 《Laravel源码入门-启动引导过程(五)$kernel->handle($request)》中第四个要载入的是 RegisterFacades,也就是 Foundation\Http\Kernel::bootstrapers[] 的第四个 \Illuminate\Foundation\Bootstrap\RegisterFacades::class, 如下: // Illuminate\Foundation\Http\Kernel.php 片段 /** * The bootstrap classes for the application. * 引导类,起引导作用的类 * * @var array */ protected $bootstrappers = [ // 载入服务器环境变量(.env 文件) \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, // 载入配置信息(config 目录) \Illuminate\Foundation\Bootstrap\LoadConfiguration::class, // 配置如何处理异常 \Illuminate\Foundation\Bootstrap\HandleExceptions::class, // 注册 Facades \Illuminate\Foundation\Bootstrap\RegisterFacades::class, // 注册 Providers \Illuminate\Foundation\Bootstrap\RegisterProviders::class, // 启动 Providers \Illuminate\...
zhmsong 发布于 6天前 阅读 52

lombok系列3:lombok的实验类特性

lombok除了已经推荐使用的基本功能,还维护了一个创新型的注解,有些功能有违常规对java认知,或者只支持eclipse,其他IDE支持有问题,甚至某些环境完全不可用。因此没有正式使用。 但是的确很有创意,这些注解已经在jar中提供,只不过它是归在"lombok.experimental.*" 包中;而基本功能在"lombok.*" 包中。 `@Accessors` --- 定制流畅的访问器。 ### @Accessors(chain=true) 链式访问,该注解设置`chain=true`,生成setter方法返回this,代替了默认的返回void。 ```java package com.pollyduan; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain=true) public class User { private Integer id; private String name; private Integer age; public static void main(String[] args) { User user=new User().setAge(31).setName("pollyduan"); System.out.println(user); } } ``` ### @Accessors(fluent = true) 与`chain=true`类似,区别在于getter和setter不带set和get前缀。 ```java package com.pollyduan; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(fluent=true) public class User { private...
polly 发布于 6天前 阅读 549 评论 4

要学好Yii的事件,先学学观察者模式

> Yii2的事件采用了“观察者模式”,先了解观察者,再学事件就容易了。 # 它是什么 首先不要被名字所吓倒,往下看,它真的很简单。 先来一个比较高大上的定义:观察者模式定义了一系列对象之间的一对多关系,当一个对象改变状态后,其他依赖者都会收到通知。 看明白了么? 如果没明白我们再来一个生活一点的:观察者模式就是订报纸的模式,你和一些人向某个报社订报纸,只要有新报纸出版,报社就会给你们送来,具体你们怎么看和报社无关,只要报社不倒闭,就会一直给你们送。 当然,你也可以退订。 **观察者模式 == 报社 + 订报纸的人** 无论你明白了哪种定义,记住一点,“观察者模式”最牛逼的地方就是让一些彼此依赖的类松耦合,牛逼的系统是什么样的?那就是每个对象间的依赖程度降到冰点,但是依然可以交互。 # 一个活生生的例子 没例子的技术文都是流氓文,我给大家举个例子,让你更形象化的理解观察者模式。 所有的观察者模式中一定有一个主题和一堆观察者,比如北哥兄弟连和每一个订阅会员 ## 对于主题(北哥兄弟连 [nai8.me](http://nai8.me)) ```php 每一天的某一刻兄弟连有了新视频,然后我会告诉所有的订阅者。 我仅仅是通知了所有订阅者有新视频了。 ``` ##...
阿北2017 发布于 1周前 阅读 603 评论 6 点赞 3

重复性管理——从泛值到泛型以及泛函(中)

用具体例子介绍了泛函(函数式)范式在解决重复性问题上的应用,并与传统方式进行了对比。
国栋 发布于 1周前 阅读 336 评论 6 点赞 3

Python类与对象

## 1.如何派生内置不可变类型并修其改实例化行为 问题1: 我们想定义一种新类型的元组,对于传入的可迭代对象,我们只保留其中int类型且值大于0的元素,例如:IntTuple([1,-1,'abc',6,['x','y'],3])==>(1,6,3),要求IntTuple是内置tuple的子类,如何实现? 解决方案:定义类IntTuple继承tuple,并实现__new__,修改实例化行为 > __new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法。new方法会返回所构造的对象,init则不会,在使用new返回对象的时候会隐式调用init函数。new函数必须以cls作为第一个参数,而init则以self作为其第一个参数 ``` class IntTuple(tuple): def __new__(cls, iterable): g = (x for x in iterable if isinstance(x,int) and x > 0) return super(IntTuple, cls).__new__(cls,g) def __init__(self, iterable): return super(IntTuple,self).__init__(iterable) t = IntTuple([1,-1,'abc',6,['x','y'],3]) print t 输出: (1, 6, 3) ``` ## 2.如何为创建大量实例节省内存 问题2: 某网络游戏中,定义了玩家类Player(id,name,status,...),每有一个在线玩家,服务器内部则有一个P...
听风的小猪 发布于 1周前 阅读 369 评论 1 点赞 1

LinuxCon的中国首秀请了哪些开源大咖?

传说中的LC3(LinuxCon + ContainerCon + CloudOpen)大会,将于今年6月19至20日在北京献上在中国的首秀。据说此次大会可谓众星云集,演讲嘉宾都是业内最顶尖的开源专家,其中半数以上的嘉宾都来自海外。国内的小伙伴终于可以不用走出国门就能与这些行业大咖近距离切磋了,是不是很期待啊! 下面就让我们先来目睹出席此次大会的巨星风采吧! Linus Torvalds     Linux和Git创始人 Linus Torvalds先生创建了Linux内核,并负责广泛使用的Linux操作系统的开源开发,被称为“Linux之父”。他至今仍然是将新代码纳入标准Linux内核的最终权威。 Torvalds于1991年研发出Linux内核。随后他组建了团队,并于1994年春季发布了V1.0版内核。1996年,Linus加入Transmeta,继续负责Linux的内核开发。2003年,Torvalds离开Transmeta,在开源开发实验室(OSDL)的支持下,他专注于Linux内核的研发。 开源开发实验室旨在促进Linux的发展,由高科技公司组成,包括IBM、惠普、英特尔、AMD、红帽、Novell等。2007年1月,开源开发实验室与自由标准组织(Free Standards Group)合并成立新机构“Linux基金会”。 李三琦    华为产品与解决方案首席技术官 李三琦博士现任华为产品与解决方案首...
OSC_Lucy 发布于 1周前 阅读 341 评论 2

Selenium+Python对开源中国官网进行模拟登录

人生苦短,我用python. life is short,I use python.
南寻 发布于 2周前 阅读 172

计算文件MD5 Checksum的几种方法

本文给出几种获取文件MD5 (CheckSum)的方法。 文件使用MD5 CheckSum的目的? 在一些场景中,比如文件传输(如插件、固件升级包等),MD5 CheckSum的作用就是用于检查文件完整性,检测文件是否被恶意篡改。 Apache网站上,我们下载文件的时候,都可以看到MD5 checksum的值,如下图所示:   接下来,我们就给出几种文件产生MD5 (checkSum)的方法。 使用java.security.MessageDigest public static String genMD5Checksum1(File file) throws NoSuchAlgorithmException, IOException { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); messageDigest.update(Files.readAllBytes(file.toPath())); byte[] digestBytes = messageDigest.digest(); StringBuffer sb = new StringBuffer(); for (byte b : digestBytes) { sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); } 其中,下面的这段代码, StringBuffer sb = new StringBuffer(); for (byte b : digestBytes) { sb.append(Integer.toStr...
王孟君 发布于 2周前 阅读 207

使用OsmSharp处理OpenStreetMap(OSM)数据

OsmSharp是一个基于.NET的OpenStreetMap(OSM)库。
黄俐 发布于 2周前 阅读 70 点赞 1

Laravel源码入门-启动引导过程(一)public/index.php

开始 public/index.php Laravel安装完成后,启动服务器,输入比如 localhost:8000时,就开始启动和引动过程。所谓请求的入口,是否可以理解为当请求 localhost:8000时和请求 localhost:8000/login 或 localhost:8000/home 都一样,每次的入口都是 public/index.php文件?或许是,应用的实例在初始化一次后,只要访问有效,就不再重新实例化。 看代码 public/index.php <?php // public/index.php /** * Laravel - A PHP Framework For Web Artisans * * @package Laravel * @author Taylor Otwell <taylor@laravel.com> */ /* |-------------------------------------------------------------------------- | Register The Auto Loader 注册类自动载入 |-------------------------------------------------------------------------- | | Composer provides a convenient, automatically generated class loader for | our application. We just need to utilize it! We'll simply require it | into the script here so that we don't have to worry about manual | loading any of our classes later on. It feels great to relax. | | 实际上就是引入和执...
zhmsong 发布于 2周前 阅读 29

ubuntu 14.04 oracle 11g 64位数据库安装

一、环境 系统:Ubuntu 14.04.5 LTS(为了贴近生产我装了个Ubuntu14的服务器版本) JDK:jdk-8u121-linux-x64.tar.gz Oracle:linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_2of2.zip 工具:Xshell5、 注:以上软件或者工具自行去相关官网下载 二、安装JDK 解压JDK tar -zxvf jdk-8u121-linux-x64.tar.gz 注:tools这个目录是我新建的,当然你也可以放在别的位置 移动jdk1.8.0_121目录到/usr/local/java,这个Java目录是我新建的。 mv jdk1.8.0_121//usr/local/java/ 接下来我们开始配置环境变量: vi .bashrc 在文件.bashrc文件末尾处新增以下配置: export JAVA_HOME=/usr/local/java/jdk1.8.0_121 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 然后执行wq!进行保存并退出   同时记得重新刷新一下文件,输入以下命令: source .bashrc 检查一下Java是否配置成功: java -version 说明我们按照成功了,这里解释一下为什么要装JDK,因为oracle有一部分的代码是通过Java编写的。 三、安装依赖包 sudo apt-get install automake //成功 sudo apt-get install autotools-dev//系统...
One-way-trip 发布于 2周前 阅读 425 点赞 1

有限状态机实现计算器小程序

本文介绍利用有限状态机原理开发计算器小程序的过程。 ## 实现的功能 1. 支持整数、小数输入 2. 支持+ - * / 四则运算 3. CE 清除当前操作数 4. C 清除所有、回到初始状态 5. 回显操作数和结果
砖瓦匠 发布于 2周前 阅读 401 点赞 1

Python字符串处理

## 一、拆分含有多种分隔符的字符串 ### 1.如何拆分含有多种分隔符的字符串 问题: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例如: ``` s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" ``` 其中;,|,\t 都是分隔符号,如何处理? 方法一: 连续使用str.split()方法,每次处理一种分隔符号 ``` s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" def mySplit(s,ds): res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split(d)), res) res = t return res print mySplit(s,';|,\t') 输出: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz'] ``` 方法二: 使用正则表达式的re.split()方法,一次性拆分字符串 ``` import re s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" print re.split(r'[;|,\t]+',s) 输出: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz'] ``` ## 二、调整字符串中文本格式 ### 1. 如何判断字符串a是否以字符串b开头或结尾 问题:某文件系统目录下有一系列文件:a.py,quicksort.c,stack.cpp,b.sh , 编写程序给其中所有.sh文件和.py文件加上用户可执行权限? 解决方案:...
听风的小猪 发布于 2周前 阅读 458 评论 3

Java工具包框架图与集合框架思维导图

Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。 Java集合工具包框架图 Collection接口 是List、Set和Queue接口的父接口 定义了可用于操作List、Set和Queue的方法-增删改查 Set接口 Set接口中不能加入重复元素,无序 Set接口常用子类: 散列存放:HashSet 有序存放:TreeSet 集合的作用总结     1、在类的内部,对数据进行组织;     2、简单而快速的搜索大数量的条目;     3、有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素;     4、有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找对应的唯一对象,而这个关键字额可以是任意类型。 与数组的对比—————为何选择集合而不是数组     1、数组的长度固定,集合长度可变     2、数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象。 集合框架思维导图...
孟飞阳 发布于 11个月前 阅读 378

尚学堂骗局,让我在码农的道路上越走越远

尚学堂是骗局吗?我的经历最终证实了谣言。从我在同学鼓励下报名尚学堂学习开始,转眼间,几个月的培训已经结束了。回想自己这几个月的经历,自己收获颇丰,觉得自己来到尚学堂培训是非常正确的。感谢尚学堂老师们精彩的授课和学习过程中各种各样的帮助。想想自己刚刚考虑打算来这培训的时候那忐忑的心情,现在我已经有了答案:“我很庆幸自己选择了这条路”。 可能由于尚学堂太知名的缘故,不少人诋毁尚学堂是骗局,可正是这个尚学堂骗局,让我收获了硕果累累的知识果实。我的培训方向是主攻Java方向,后期还学习了当下比较流行的Linux技术。在培训期间,我们主要是通过实际操作项目来学习并温顾所学知识。这正是我们所需要的锻炼。记得在学校里,我们虽然学习了很多专业的知识,但是我们并没有自己所擅长的方面,并且我们学的都是理论上的知识,实际动手能力是很差的。所以,我们需要培养自己的动手能力,也就是实战能力。而在尚学堂,我们的老师都是操作过实际项目的,都有一定的工作经验,他们不仅给我们讲专业知识,还给我们传授职场上的技能。培训就是提供了一个培养我们踏入职场所需要的东西的平台。 没有人会比尚学堂的老师们更负责任,还记得老师们给了我一份详尽...
shu爱 发布于 3小时前 阅读 7

C# 调用 Delphi DLL

l ``` 技术实现 如何逐步实现动态库的加载,类型的匹配,动态链接库函数导出的定义,参考下面宏定义即可: #define LIBEXPORT_API extern "C" __declspec(dllexport) 第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和: LIBEXPORT_API int mySum(int a,int b){ return a+b;} C# 导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)] public static extern int mySum (int a,int b); } 在C#中调用测试: int iSum = RefComm.mySum(,); 运行查看结果iSum为5,调用正确。第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。 第二步,我定义了字符串操作的函数(简单起见,还是采用前面的函数名),返回结果为字符串: LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a); return a;} C# 导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, strin...
vga 发布于 6小时前 阅读 6

Linux基金会执行董事 Jim Zemlin 将在 LinuxCon 做主题演讲,你来不来?

这场活动将三场会议的内容整合为一体,是一场面向开发人员、运营专家(架构师、系统管理员和开发运营人员)、以及商业、合规和法律领袖与其他专业人员的技术大会。
Linux

Error:java: Compilation failed: internal java compiler error

错误显示 解决方法 就在file->settings->java compiler 看到Target bytecode version=1.5 版本问题,太低了, 设成1.7.解决 从低往高编译不可以,但从高往低,可以.
Clarence_D 发布于 13小时前 阅读 6

Spring AOP源码分析(一)AOP介绍和aspectj、SpringAOP入门

首先说说三个名词,面向对象、面向接口编程、面向切面编程(Aspect Oriented Programming 即AOP)。 针对java来说 面向对象:是对现实世界的描述,是后两者的基础,大前提。 面向接口编程:接口就是一组规则的集合,这组规则可以有不同的实现方式。如JDBC,它本身仅仅是接口规范,不同的数据库有不同的实现,我们通过JDBC这样的接口编程,就无需关心我们使用的是哪种数据库,可以方便的实现数据库的切换而不必改动代码。 面向切面编程:是对面向对象的补充,主要应用的场景为:               (1):权限拦截               (2):方法监控               (3):日志记录 虽然这些场景有时可以使用其他方案解决,从侵入性方面来看,AOP绝对是一个好的方案。 然后又是几个大名词:AOP、Spring AOP和aspectj和jboss AOP AOP:首先是AOP联盟约定了几个概念,如Joinpoint、Pointcut、Advice等。               (1) Pointcut:拦截点表达式,               (2)Joinpoint:符合上述Pointcut表达式的一个具体的拦截点。他们的关系就                             像正则表达式和...
乒乓狂魔 发布于 2年前 阅读 662 点赞 1

@SessionAttributes 注解

session注解
saboloh 发布于 2年前 阅读 1788 点赞 1

在C++软件中嵌入python解释器

在某个C++应用程序中,我们用一组插件来实现一些具有统一接口的功能,我们使用Python来代替动态链接库形式的插件,这样可以方便地根据需求的变化 改写脚本代码,而不是必须重新编译链接二进制的动态链接库。Python强大的功能足以胜任,但是有一些操作系统特定的功能需要用C++来实现,再由 Python调用。
openthings 发布于 2年前 阅读 1319

汉字转拼音工具JPinyin的介绍和使用示例

汉字转拼音的开源工具类包,已经出现过好几个,比如:Pinyin4J、Jpinyin等。本文主要结合JPinyin汉字转拼音的Java开源类库,给出相关的介绍和使用示例。 Jpinyin介绍 JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。 JPinyin主要特性 1、准确、完善的字库; Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外的所有汉字; 2、拼音转换速度快; 经测试,转换Unicode编码从4E00-9FA5范围的20902个汉字,JPinyin耗时约100毫秒。 3、多拼音格式输出支持; JPinyin支持多种拼音输出格式:带音标、不带音标、数字表示音标以及拼音首字母输出格式; 4、常见多音字识别; JPinyin支持常见多音字的识别,其中包括词组、成语、地名等; 5、简繁体中文转换; 6、支持添加用户自定义字典; 上述主要特性摘自Jpinyin的Github页面。 JPinyin原理 JPinyin对汉字转拼音的支持,主要是通过预定的字典文件实现的。Jpinyin预定义了三个字典文件,如下图所示: 其中,pinyin.dict文件定义了汉字和对应拼音的键值对。部分内容如下: 〇=líng 一=yī 丁=dīng,zhēng 丂=kǎo,qiǎo,yú 七=qī 丄=...
王孟君 发布于 6个月前 阅读 843 评论 5 点赞 1

第一类对象(First-class Object)

第一类公民(对象,实体,值等)是指可以在执行期创建并作为参数传递给其他函数或传入一个变数的实体。
Barudisshu 发布于 2年前 阅读 1203 点赞 1

求数组中 任意连续子数组的和的最大值

求数组中 任意子数组(连续的)的和的最大值
无情小白龙 发布于 3年前 阅读 922 打赏 1

hibernate防止sql注入对参数赋值传参数的例子

1、按参数名称绑定 在HQL语句中定义命名参数要用”:”开头,形式如下:  Query query=session.createQuery(“from User user where user.name=:customername and user:customerage=:age ”);  query.setString(“customername”,name);  query.setInteger(“customerage”,age);  上 面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用 Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。  2、 按参数位置邦定 在HQL查询语句中用”?”来定义参数位置,形式如下:  Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);  query.setString(0,name);  query.setInteger(1,age);  同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。  注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中...
毅屺 发布于 11个月前 阅读 96

从for_each开始说起 回调函数与仿函数

C程序员风格的回调函数 && C++操作符重载的仿函数风格 代码很简单
NDSM 发布于 3年前 阅读 446 评论 1

基于jfinal的XssHandler,统一处理xss脚本攻击

 前天公司的网站在《360安全检测》上发现了大量xss漏洞。好吧,我立马懂了,除了我做得有几个模块过滤了之外,别的几乎100%存在!     对于这个东西怎么解决呢?狠是纠结了一番,一个个去改controller吗?好吧这不是我的风格,我没这么勤快!使用拦截器么?(公司使用的是Spring MVC)貌似也解决不了问题?最后使用Filter将问题统一处理OK,其原理是重写掉Request中的getParameter、getParameterValues和getParameterMap方法,使用jsoup清理掉消除不受信任的HTML!     废话不多说,贴代码!下面是我在JFinal中使用handler的实现! //XssHandler.java   /**  * 统一XSS处理  * @author L.cm  * email: 596392912@qq.com  * site:  http://www.dreamlu.net  * @date 2014-5-5 上午9:11:10  */ public class XssHandler extends Handler {           // 排除的url,使用的target.startsWith匹配的     private String exclude;           public XssHandler(String exclude) {         this.exclude = exclude;     }       @Override     public void handle(String target, HttpS...
凯文加内特 发布于 2年前 阅读 856 点赞 1

第十章 Scala 容器基础(二十):使用reduce和fold方法遍历集合的所有元素

Problem     你想要遍历有序集合的所有元素,并且随着你对集合元素的遍历,对比两个相邻的元素 Solution     使用reduceLeft, foldLeft, reduceRight, foldRight来遍历集合的元素,你的方法作用在相邻的两个元素上,从第一次要遍历的两个相邻元素开始,把你的方法作用在这两个元素上得到返回值,然后把你的方法继续作用在返回值和集合中第三要遍历的元素得到的返回值,再继续和第四个要遍历的元素作用。。。直到遍历完最后一个元素为止: scala> val a = Array(12, 6, 15, 2, 20, 9) a: Array[Int] = Array(12, 6, 15, 2, 20, 9) scala> a.reduceLeft(_ + _) res32: Int = 64     这个例子是这样的:12+6=18, 18+15=33, 33+2=35, 35+20=55, 55+9=64,就是对集合的所有元素求和     接下来你会看到如何使用reduceLeft来计算集合元素的乘积和求最大最小值: scala> a.reduceLeft(_ * _) res33: Int = 388800 scala> a.reduceLeft(_ min _) res34: Int = 2 scala> a.reduceLeft(_ max _) res35: Int = 20 Show each step in the process     我们来看看reduceLeft的执行细节: val findMax = (x: Int, ...
阿拉德大陆的魔法师 发布于 1年前 阅读 354 点赞 1

JPA在MySQL中自动建表

JPA(Java Persistence API)是Spring Boot访问关系型数据库的一个标准接口,它使用ORM(Object-Relational Mapping)方式为数据对象建模和实现持久化。当然JAP也可以应用于其它支持Java的开发框架之中。 在JPA中使用MySQL数据库,只要为其进行建模,就可以自动生成表结构,省略了一些数据库设计的工作。而且,当数据模型更改的时候,应用程序也会对表结构进行更新。需要实现这一功能,主要取决你对使用JPA的配置。 例如,我们有一个数据的实体-关系模型如下图所示。 首先,我们创建项目工程,并引入Spring Boot和JPA的依赖。 其中,Spring Boot依赖如下所示: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.2.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> ...
快意开发 发布于 6个月前 阅读 281 评论 1

在Linux系统中安装qt的详细步骤

花了我三天时间,去各种网上找了各种方法来装QT,刚开始都失败了,后来终于找到了一种适用于自己的方法来装Qt,主要介绍了在Centos5.5中安装Qt4.5.5的详细步骤,以及各种问题解决的办法。
双月通天 发布于 3年前 阅读 176

增强for循环

JDK1.5之后增加增强for循环,可以用于数组和集合的遍历
Bug-Killer 发布于 1年前 阅读 110 点赞 1

Java版本之Spark 统计每个分区的元素以及元素数据量

java spark 分区 mapPartitionsWithIndex
momisabuilder 发布于 12个月前 阅读 17

文件,文本文件以及编码——乱码探源(1)

介绍了文件名在操作系统中的编码,以及一些非文本文件中的文本内容所用的编码
国栋 发布于 2年前 阅读 559 点赞 2

Spring ApplicationContext源码分析

Spring的ClassPathXmlApplicationContext的加载的过程,其中关键是AbstractApplicaitionContext中的refresh()方法。依赖子类AbstractRefreshableApplicationContext创建BeanFactoy,AbstractRefreshableConfigApplicationContext维护Resource的locations信息。 AbstractXmlApplicationContext:加载BeanDefinition的定义信息到BeanFactory中。
慕哲 发布于 1个月前 阅读 29

如何使用Kotlin开发微服务

谷歌在5月18号的I/O开发者大会上,宣布将Kotlin语言作为安卓开发的一级编程语言。可能很多人这时第一次听说这门语言。我了解这门语言时间也不长,在今年的一个内网帖子上第一次看到这门语言。今天我们来了解一下Kotlin这门语言和如何使用Kotlin开发微服务 ### Kotlin简介 > Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言,其名称来自于圣彼得堡附近的科特林岛。 以上是维基百科上对于Kotlin的介绍。Kotlin是JetBrains的开发团队设计的基于JVM运行的一门编程语言。 Kotlin的诞生时间并不长,Kotlin的开发始于2010年,在2016年发布第一个正式版本1.0。它吸收了包括C#、GO等新兴语言的特性。虽然它在语法上和Java不兼容,但是它在设计时就考虑和Java的代码相互调用,并且可以复用Java现有的类库。 ### 使用Kotlin进行服务端开发 Kotlin非常适合服务端开发,同时Kotlin在设计时就考虑了和Java技术栈的完全兼容,所以对于Java开发者来说,非常容易上手。Java语言设计在90年代,由于Java社区的复杂性,导致Java的特性发展明显落后于其他语言。使用Kotlin可以既享受到...
wangyan9110 发布于 4天前 阅读 617 评论 19 点赞 1

学了两年半,Yii2的内置事件知多少?

> 书接上回,我将代码提交到服务器后被小X经理一顿批,她是这样说的。 ```php 小X: 你丫不知道yii2自己就有登陆后的事件么? 我:不知道啊,咋的吧? 小X:改!😡😡😡😡,然后统计个yii2预定义事件表给我。 我:哦,好的。😱😱😱 ``` 好吧,算咱技术不到家,那就赶紧改吧,先回顾下上一篇我都干了啥,我是在会员登陆后触发了一个事件,既然说有内置的,那就找找吧。 我知道登陆功能是使用yii\web\User这个类,那应该去那里去找它们。它在@app/vendor/yiisoft/yii2/web/User.php @@nai8@@ # 5分钟以后~ 果然,我找到了那个事件,还用了3分钟分析了如何使用,现在把我的研究成果和大家分享下。 对于yii2系统的登陆,yii\web\User类一共提供了4个事件,如下 ```php const EVENT_BEFORE_LOGIN = 'beforeLogin'; const EVENT_AFTER_LOGIN = 'afterLogin'; const EVENT_BEFORE_LOGOUT = 'beforeLogout'; const EVENT_AFTER_LOGOUT = 'afterLogout'; ``` 分别是登陆前后、注销前后,我要使用的是EVENT_AFTER_LOGIN事件,那么如何去使用那? 既然是登陆,还是先看下yii\web\User中的login方法,看看是否有蛛丝马迹 ```php public function login(IdentityInterface...
阿北2017 发布于 3天前 阅读 420 评论 2

lombok系列3:lombok的实验类特性

lombok除了已经推荐使用的基本功能,还维护了一个创新型的注解,有些功能有违常规对java认知,或者只支持eclipse,其他IDE支持有问题,甚至某些环境完全不可用。因此没有正式使用。 但是的确很有创意,这些注解已经在jar中提供,只不过它是归在"lombok.experimental.*" 包中;而基本功能在"lombok.*" 包中。 `@Accessors` --- 定制流畅的访问器。 ### @Accessors(chain=true) 链式访问,该注解设置`chain=true`,生成setter方法返回this,代替了默认的返回void。 ```java package com.pollyduan; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain=true) public class User { private Integer id; private String name; private Integer age; public static void main(String[] args) { User user=new User().setAge(31).setName("pollyduan"); System.out.println(user); } } ``` ### @Accessors(fluent = true) 与`chain=true`类似,区别在于getter和setter不带set和get前缀。 ```java package com.pollyduan; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(fluent=true) public class User { private...
polly 发布于 6天前 阅读 549 评论 4

关于消息变更的最佳实践

java 观察者模式 消息变更
xpbob 发布于 4天前 阅读 216

您想参观体验IBM的创新中心,切身体会技术给时代带来的改变么?”

本次活动还特别设有实机操作环节,由IBM的技术大咖带领开发者在短时间内迅速上线人工智能应用。另外在最后,大家还可以参观体验IBM的创新中心,切身体会技术给时代带来的改变。
IBM技术沙龙

重复性管理——从泛值到泛型以及泛函(下)

在前面我们谈论了重复性管理上的一些具体做法,重点探讨了泛型范式和泛函范式在解决重复性问题上的应用。因为前面的篇幅有很多被具体的代码例子占据了,所以留到现在这篇做一个归纳总结。 与数学的渊源 应该说,编程与数学还是颇有渊源的,或者说它们之间有很多相通的地方。数学的一个突出特点,那就是数学家总是在不断寻求更加一般化的表述,更为抽象的表达。我们来看一个具体的例子。 数学上有所谓的勾股数,最知名的就是我们所熟知的“勾三股四玄五”了。具体而言就是 3^2 + 4^2 = 5^2. 注:3^2 表示 3 的 2 次方(平方),因为上标较为麻烦,其余类似。 类似的正整数组合还有比如:5^2 + 12^2 = 13^2. 显然,我们都知道这些都是勾股定理的一些正整数特例而已,数学家们肯定不会只满足与此,很早他们就发现了所有的直角三角形都满足一个一般化的表达如下: a^2 + b^2 = c^2. 这就是所谓的“勾股定理”了。 在西方,叫“毕达哥拉斯定理”(Pythagorean theorem) 那么,是否到这里,事情就结束了呢?如果你还记得曾经学过的数学,那么你应该还记得有个东西叫“余弦定理(law of cosines)”,具体如下: 当角度 γ 为 90 度时,因为 cos(90) = 0,这样“余弦定理”就简化...
国栋 发布于 3天前 阅读 168 评论 3

花十分钟时间给JFinal写了个talent-aio插件。。。

本人 JFinal脑残粉,最近公司几个项目都需要跟硬件交互,这就得用到长连接,之前一直没接触过该领域,本来还想花时间研究下netty,讲真挺难啃的,找资料的时候翻到 talent-aio,略微了解发现似乎学习成本极低,没想到作者本人也极其nice,解答我这个门外小伙子好多个问题,顺利用上此框架,刚好解了我的燃眉之急。 什么是 talent-aio? talent-aio是基于java aio实现的即时通讯框架,源于作者另一个久经考验的talent-nio框架,但在易用性、性能及代码可读性方面又远远超越了talent-nio。 顺便放上传送门:https://my.oschina.net/talenttan/blog/863545 废话不说,下面正题: 下载talent-aio的demo,demo极其简单,主要还是看HelloAbsAioHandler这个类的编码协议,剩下的就是看Aio的类了,api 貌似都在这。具体不介绍了,上面有链接,要注意的是Client端与Server端协议要一致。在这里说下我之前踩的坑,比如talent-aio的demo代码中的协议是有header的,Server端对客户端没有要求,但必须遵循交互协议,所以若是你用百度出来的socket实例连Server要注意,这里我们用回本身提供的Client代码就可以了。 导入talnet-aio依赖。 <dependency> <groupId>com.tale...
小徐同学 发布于 2个月前 阅读 5277 评论 26 点赞 25 打赏 1

要学好Yii的事件,先学学观察者模式

> Yii2的事件采用了“观察者模式”,先了解观察者,再学事件就容易了。 # 它是什么 首先不要被名字所吓倒,往下看,它真的很简单。 先来一个比较高大上的定义:观察者模式定义了一系列对象之间的一对多关系,当一个对象改变状态后,其他依赖者都会收到通知。 看明白了么? 如果没明白我们再来一个生活一点的:观察者模式就是订报纸的模式,你和一些人向某个报社订报纸,只要有新报纸出版,报社就会给你们送来,具体你们怎么看和报社无关,只要报社不倒闭,就会一直给你们送。 当然,你也可以退订。 **观察者模式 == 报社 + 订报纸的人** 无论你明白了哪种定义,记住一点,“观察者模式”最牛逼的地方就是让一些彼此依赖的类松耦合,牛逼的系统是什么样的?那就是每个对象间的依赖程度降到冰点,但是依然可以交互。 # 一个活生生的例子 没例子的技术文都是流氓文,我给大家举个例子,让你更形象化的理解观察者模式。 所有的观察者模式中一定有一个主题和一堆观察者,比如北哥兄弟连和每一个订阅会员 ## 对于主题(北哥兄弟连 [nai8.me](http://nai8.me)) ```php 每一天的某一刻兄弟连有了新视频,然后我会告诉所有的订阅者。 我仅仅是通知了所有订阅者有新视频了。 ``` ##...
阿北2017 发布于 1周前 阅读 603 评论 6 点赞 3

几篇 Kotlin 编程语言入门的文章

这几天 Kotlin 好火啊,因为 Google 官方宣布 Android 的首选语言改为 Kotlin。 不管是啥,先了解一下这门语言的基本知识吧: 使用 Kotlin 命令行编译器编译并运行首个 Kotlin 程序  Kotlin 编程语言的基本语法  Kotlin 编码风格 
可译网 发布于 3天前 阅读 85 点赞 1

开源项目spring-shiro-training思维导图,让项目不再难懂

>写在前面 终于完成了一个开源项目的思维导图解读。选spring-shiro-training这个项目解读是因为它开源,然后涉及到了很多我们常用的技术,如缓存,权限,任务调度,ssm框架,Druid监控,mybatis-plus,代码生成器等。同时也考虑到了安全方面,做了防止crsf攻击方面控制。作为一个简单易用的权限系统,它也足够我们学习了。 当然,可能解读不会很全,也可能有些写得不对。有些是基于个人的理解,一些网上参考的资料。如果想要理解一个项目单单看别人的解读是不够的,需要你去克隆下来在你的IDE上去调试理解别人的代码。 >项目git地址和演示地址 git: http://git.oschina.net/wangzhixuan/spring-shiro-training 官方演示: [http://shiro.dreamlu.net](http://shiro.dreamlu.net/)  账号:test 密码:test (测试账号,增删改不能用) >解读思维导图 ![1、spring-shiro-training项目简介与导入.png](http://upload-images.jianshu.io/upload_images/4120002-2af0a60a41aef042.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![2、主要技术概况.png](http://upload-images.jianshu.io/upload_images/4120002-30030501336254ad.png?imageMogr2/auto-orient/strip%7...
java思维导图 发布于 2个月前 阅读 2522 评论 7 点赞 3

java基础思维导图,让java不再难懂

>思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具。了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图不仅仅只有简单明了这个好处,它还能加深人对主题的印象和理解,能达到快速阅读的好处,就好像一本书的目录大纲,当你阅读了导图之后再带有目的的去找资料往往能达到事半功倍的效果。 就从java基础开始吧。花了3天的晚上的时间把[菜鸟教程的java教程](http://www.runoob.com/java/java-tutorial.html)用思维导图的方式表达出来。 废话不都说,直接上图哈 ![java基础思维导图整理.png](http://upload-images.jianshu.io/upload_images/4120002-66ca593631f7dc10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![1、Java 简介.png](http://upload-images.jianshu.io/upload_images/4120002-febc1570c2425cf0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![2、java主要特性.png](http://upload-images.jianshu.io/upload_images/4120002-a18a40fd0180afaa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![3、java发展历史...
java思维导图 发布于 2个月前 阅读 8979 评论 43 点赞 36

重复性管理——从泛值到泛型以及泛函(中)

用具体例子介绍了泛函(函数式)范式在解决重复性问题上的应用,并与传统方式进行了对比。
国栋 发布于 1周前 阅读 336 评论 6 点赞 3

Python类与对象

## 1.如何派生内置不可变类型并修其改实例化行为 问题1: 我们想定义一种新类型的元组,对于传入的可迭代对象,我们只保留其中int类型且值大于0的元素,例如:IntTuple([1,-1,'abc',6,['x','y'],3])==>(1,6,3),要求IntTuple是内置tuple的子类,如何实现? 解决方案:定义类IntTuple继承tuple,并实现__new__,修改实例化行为 > __new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法。new方法会返回所构造的对象,init则不会,在使用new返回对象的时候会隐式调用init函数。new函数必须以cls作为第一个参数,而init则以self作为其第一个参数 ``` class IntTuple(tuple): def __new__(cls, iterable): g = (x for x in iterable if isinstance(x,int) and x > 0) return super(IntTuple, cls).__new__(cls,g) def __init__(self, iterable): return super(IntTuple,self).__init__(iterable) t = IntTuple([1,-1,'abc',6,['x','y'],3]) print t 输出: (1, 6, 3) ``` ## 2.如何为创建大量实例节省内存 问题2: 某网络游戏中,定义了玩家类Player(id,name,status,...),每有一个在线玩家,服务器内部则有一个P...
听风的小猪 发布于 1周前 阅读 369 评论 1 点赞 1

佳能G1800 G2800 G3800清零软件5B00 MX478 MX498 IP8780清零软件使用教程

佳能G1800 G2800 G3800清零软件5B00 MX478 MX498 IP8780清零软件使用教程
reset888 发布于 3个月前 阅读 499

lombok系列1:初识lombok

官网:https://projectlombok.org/ 什么是lombok --- 连官网都懒得废话,只给出了一句广告词:给你的java加点料(spice up your java)。 我们自己来总结一下: lombok是一个ide插件,它可以让我们写更少的代码,而编译出更多的字节码。 也就是说,我们可以让我们编译出一个复杂的.class文件,而我们的.java文件很干净清爽。 为什么要使用lombok --- 首先,我们可以写更少的代码,而不影响其他类引用,方法一个不能少; 其次,lombok是编译周期参与的,运行时完全无依赖,对字节码而言无侵入; 代码review更简单,一目了然。 lombok适用场景 --- 尤其适合pojo类,如普通的javabean、orm的实体类、json的实体类等。 有些功能如Log相关,适用于任意类。 spring Cloud已经引入为一个core组件,可以放心使用。 hello lombok --- 首先,我们按照传统的方式编写一个java bean,增加getter、setter、toString: ```java package com.pollyduan; import java.util.Date; public class User { private Integer id; private String userName; private String password; private String email; private Integer age; private Date signupTime; public Integer getId() { return id; } pub...
polly 发布于 6天前 阅读 62

一种利用JAVA注释支持多行字符串的方法

  从BeetlSql项目将SQL全放在Beetl模板里得到启发,又想到一个比较偏门的用法。以下代码实测通过,详见jSqlBox项目的test\examples\multipleLineSQL\SqlTemplateDemo.java源程序,此示例特殊点在于:运行时必须将此源程序拷贝一份在类根目录(或Maven管理的Resource目录下), 并将后缀".java"改为".sql" public class SqlTemplateDemo extends TestBase { //@formatter:off public static class InsertUser extends SqlTemplate { public InsertUser(Object name, Object address, Object age){ /* insert into users (username, address, age) */ empty(name,address,age); /* values (?,?,?)*/ } } public static class FindUsers extends SqlTemplate { public FindUsers(Object name, Object age){ /* select count(*) from users where */ /* username=? */empty(name); /* and age>? */empty(age); /* order by username */ } } public static class GetUserCount extends SqlTemplate { /* select count(*) from users */ } public static class ...
yong9981 发布于 3周前 阅读 1393 评论 12

Laravel源码入门-启动引导过程(九)RegisterFacades

上文介绍了 HandleExceptions,在 《Laravel源码入门-启动引导过程(五)$kernel->handle($request)》中第四个要载入的是 RegisterFacades,也就是 Foundation\Http\Kernel::bootstrapers[] 的第四个 \Illuminate\Foundation\Bootstrap\RegisterFacades::class, 如下: // Illuminate\Foundation\Http\Kernel.php 片段 /** * The bootstrap classes for the application. * 引导类,起引导作用的类 * * @var array */ protected $bootstrappers = [ // 载入服务器环境变量(.env 文件) \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, // 载入配置信息(config 目录) \Illuminate\Foundation\Bootstrap\LoadConfiguration::class, // 配置如何处理异常 \Illuminate\Foundation\Bootstrap\HandleExceptions::class, // 注册 Facades \Illuminate\Foundation\Bootstrap\RegisterFacades::class, // 注册 Providers \Illuminate\Foundation\Bootstrap\RegisterProviders::class, // 启动 Providers \Illuminate\...
zhmsong 发布于 6天前 阅读 52

我是怎样帮助漂亮的测试妹妹实现自动化的(小记)

一天,我们的产品经理“乔哥”跟我说:现在你学习的selenium不仅可以实现批量采集,而且也可以帮助我们的测试组实现部分自动化。心花怒放的我很开心的就接下了这个案子,于是就有了这篇博客。
爬虫张小呆 发布于 2天前 阅读 72

java利用ftpClient来创建多层目录文件

//改变目录路径 public boolean changeWorkingDirectory(String directory) { boolean flag = true; try { flag = ftpClient.changeWorkingDirectory(directory); if (flag) { logger.debug("进入文件夹" + directory + " 成功!"); } else { logger.debug("进入文件夹" + directory + " 失败!"); } } catch (IOException ioe) { ioe.printStackTrace(); } return flag; } //创建目录 public boolean makeDirectory(String dir) { boolean flag = true; try { flag = ftpClient.makeDirectory(dir); if (flag) { logger.debug("创建文件夹" + dir + " 成功!"); } else { logger.debug("创建文件夹" + dir + " 失败!"); } } catch (Exception e) { e.printStackTrace(); } return flag; } //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建...
啊哈关关 发布于 3个月前 阅读 487

springboot - spring security - OAuth2 认证

原文   OAuth2 统一认证 简介 模式 注明: Resource Owner:即指需要授权访问的资源,比如用户昵称,头像 Authorization Server:鉴权服务,核心鉴权逻辑 Resource Server:资源服务 配合代码中的三个注解: EnableResourceServer:配置授权资源路径 EnableAuthorizationServer:配置授权服务 EnableOAuth2Client:配置Client信息 原理 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(authorization layer)。"客户端"不能直接登录"服务提供商",只能登录授权层,以此将用户与客户端区分开来。"客户端"登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。 "客户端"登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放用户储存的资料。       (A)用户打开客户端以后,客户端要求用户给予授权。 (B)用户同意给予客户端授权。 (C)客户端使用上一步获得的授权,向认证服务器申请令牌。 (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。 (E)客户端使用令牌,向资源服务器申请获取资源。 (F)资源服务器确认令牌无误,同意向客户端开放资源。   其中,B 是用...
中柠檬 发布于 2个月前 阅读 589 打赏 1

lombok系列2:lombok注解详解

开篇 --- 看到第一篇《[初识lombok](https://my.oschina.net/polly/blog/904111)》你可能意犹未尽,本文我们按照场景来介绍一下常用的注解。 未特别说明,均标注在类级别。 lombok.Data --- 最常用的注解,编译时自动添加Setter、Getter、toString()、equals()和hashCode()。 ```java package com.pollyduan; import java.util.Date; import lombok.Data; @Data public class User { private Integer id; private String userName; private String password; private String email; private Integer age; private Date signupTime; public static void main(String[] args) { User user=new User(); user.setId(1001); user.setUserName("pollyduan"); user.setPassword("123456"); user.setEmail("pollyduan@pollyduan.com"); user.setAge(30); user.setSignupTime(new Date()); System.out.println(user); System.out.println(user.getUserName()); System.out.println(user.hashCode()); } } ``` 使用场景: POJO类、hibernate的实体类、json或jaxb的实体类。 lombok.Value --- 如果我们需要一个不可变的对象类,那么就用该注解。它在编译是自动添加Getter、toString(...
polly 发布于 3天前 阅读 32

C语言双重指针初始化

C语言双重指针初始化示例
骑行远方 发布于 55分钟前 阅读 2

c++中堆和栈的的区别(stack vs heap)

 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区...
MtrS 发布于 58分钟前 阅读 2

JAVA多线程下载网络文件

JAVA多线程下载网络文件,开启多个线程,同时下载网络文件。 import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /**  * 说明:  * 每一个线程下载的位置计算方式:  * 开始位置: (线程id - 1) * 每一块大小  * 结束位置: (线程id*每一块大小) - 1   *   * 注意:有时候不一定能够整除,所以最后一个线程的结束位置应该是文件的末尾  *    *  步骤:  *  1.本地创建一个大小跟服务器文件相同的临时文件  *  2.计算分配几个线程去下载服务器上的资源,知道每个线程下载文件的位置  *  3.开启三个线程,每一个线程下载对应位置的文件  *  4.如果所有的线程,都把自己的数据下载完毕后,服务器上的资源都被下载到本地了  *   * 作者: zhoubang   * 日期:2015年8月7日 上午11:20:06  */ public class MultiThreadDownload {     public static String path = "http://static.csdn.net/public/common/toolbar/css/index.css"; // 要下载的网络资源文件路径     public static int threadCount = 10; // 开启的线程数     public static int runningThread = 10; // 记...
jin_6868 发布于 1小时前 阅读 1

验证码图片生成工具类——Captcha.java

验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面。 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /**  * 验证码图片生成工具  *  使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面。  *    *   * 作者: zhoubang   * 日期:2015年8月7日 上午10:41:05  */ public class Captcha {     public static final String RANDOMCODEKEY = "sess_captcha";// 放到session中的key     private Random random = new Random();     private String randString = "0123456789";// 随机产生的字符串     private int width = 80;// 图片宽     private int height = 26;// 图片高     private int lineSize = 40;// 干扰线数量     private int stringNum = 4;// 随机产生字符数量...
jin_6868 发布于 1小时前 阅读 1

您想参观体验IBM的创新中心,切身体会技术给时代带来的改变么?”

本次活动还特别设有实机操作环节,由IBM的技术大咖带领开发者在短时间内迅速上线人工智能应用。另外在最后,大家还可以参观体验IBM的创新中心,切身体会技术给时代带来的改变。
IBM技术沙龙

二维码工具类 - QrcodeUtils.java

二维码工具类,提供多种生成二维码、解析二维码的方法,包括中间logo的二维码等方法。  - QrcodeUtils.java、MatrixToImageWriterEx.java、MatrixToLogoImageConfig.java、commons-io-2.4.jar、commons-lang-2.6.jar、slf4j-api-1.7.12.jar、javase-3.1.0.jar、core-3.1.0.jar 、FolderUtils.java)   QrcodeUtils.java 源码: import java.awt.Color; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.UUID; import javax.imageio.ImageIO; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.SystemUtils; import org.sl...
jin_6868 发布于 1小时前 阅读 1

大数据量查询优化——数据库设计、SQL语句、JAVA编码

数据库设计方面: 1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。              如: select id from t where num is null               可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,      那么即使在sex上建了索引也对查询效率起不了作用。 4、索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重      考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 5、应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将...
jin_6868 发布于 1小时前

maven编译的时候排除junit测试类

maven项目中使用junit进行单元测试,在进行编译的时候,可以通过2种方式排除test测试类的编译。 有2种方式 : 使用命令的时候带上参数 mvn install -Dmaven.test.skip=true 在pom.xml里面配置 <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins>                         文章转载地址::http://www.cnblogs.com/zhoubang521/p/5200641.html               
jin_6868 发布于 2小时前 阅读 2

JVM加载class文件的原理机制

1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的     类装载器所做的工作实质是把类文件从硬盘读取到内存中 2.java中的类大致分为三种:      1.系统类      2.扩展类      3.由程序员自定义的类 3.类装载方式,有两种      1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中,      2.显式装载, 通过class.forname()等方法,显式加载需要的类       隐式加载与显式加载的区别: 两者本质是一样的!都是加载到JVM虚拟机中。 4.类加载的动态性体现          一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再  运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是一种可以理解的机制,而用到时再加载这也是java动态性的一种体现   5.java类装载器      Java中的类装载器实质上也是类,功能是把类载入jvm中,值得注意的是jvm的类装载器并不是一个,而是三个,层次结构如下:  ...
jin_6868 发布于 2小时前 阅读 1

JAVA多线程synchronized详解

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。 第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。 以上规则对其它对象锁同样适用.     举例说明(使用synchronized): 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。我们首先编写一...
jin_6868 发布于 2小时前 阅读 1

微信群发接口开放留言之抢先体验心得

对于微信第三方平台来说,微信开放了群发留言相关的接口算是个天大的好消息。通过开发可以实现在第三方的平台进行群发开启关闭留言(对所有人或者仅对粉丝开启),精选,取消精选,删除,回复留言功能。文档当然写的....大家懂的....还是需要自己的摸索体验,那在以前没有玩过post相关的功能的情况下,花了一些时间去研究。希望和大家分享遇到的坑以及如何解决这些坑。
wsy940822 发布于 3小时前 阅读 4

尚学堂骗局,让我在码农的道路上越走越远

尚学堂是骗局吗?我的经历最终证实了谣言。从我在同学鼓励下报名尚学堂学习开始,转眼间,几个月的培训已经结束了。回想自己这几个月的经历,自己收获颇丰,觉得自己来到尚学堂培训是非常正确的。感谢尚学堂老师们精彩的授课和学习过程中各种各样的帮助。想想自己刚刚考虑打算来这培训的时候那忐忑的心情,现在我已经有了答案:“我很庆幸自己选择了这条路”。 可能由于尚学堂太知名的缘故,不少人诋毁尚学堂是骗局,可正是这个尚学堂骗局,让我收获了硕果累累的知识果实。我的培训方向是主攻Java方向,后期还学习了当下比较流行的Linux技术。在培训期间,我们主要是通过实际操作项目来学习并温顾所学知识。这正是我们所需要的锻炼。记得在学校里,我们虽然学习了很多专业的知识,但是我们并没有自己所擅长的方面,并且我们学的都是理论上的知识,实际动手能力是很差的。所以,我们需要培养自己的动手能力,也就是实战能力。而在尚学堂,我们的老师都是操作过实际项目的,都有一定的工作经验,他们不仅给我们讲专业知识,还给我们传授职场上的技能。培训就是提供了一个培养我们踏入职场所需要的东西的平台。 没有人会比尚学堂的老师们更负责任,还记得老师们给了我一份详尽...
shu爱 发布于 3小时前 阅读 7

C# 调用 Delphi DLL

l ``` 技术实现 如何逐步实现动态库的加载,类型的匹配,动态链接库函数导出的定义,参考下面宏定义即可: #define LIBEXPORT_API extern "C" __declspec(dllexport) 第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和: LIBEXPORT_API int mySum(int a,int b){ return a+b;} C# 导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)] public static extern int mySum (int a,int b); } 在C#中调用测试: int iSum = RefComm.mySum(,); 运行查看结果iSum为5,调用正确。第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。 第二步,我定义了字符串操作的函数(简单起见,还是采用前面的函数名),返回结果为字符串: LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a); return a;} C# 导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, strin...
vga 发布于 6小时前 阅读 6

java泛型(一)基本介绍和使用

java泛型之基础介绍和使用
Clarence_D 发布于 12小时前 阅读 3

Error:java: Compilation failed: internal java compiler error

错误显示 解决方法 就在file->settings->java compiler 看到Target bytecode version=1.5 版本问题,太低了, 设成1.7.解决 从低往高编译不可以,但从高往低,可以.
Clarence_D 发布于 13小时前 阅读 6

selection sort (C语言实现)

#include <stdio.h> #include <string.h> #include <stdlib.h> #define ulong unsigned long void swap2(int* a ,int* b) { int m; m=*a; *a=*b; *b=m; } void selection_sort(int* f,ulong n) { ulong i; for(i=0;i<n;i++) { int v=f[i]; ulong m=i; ulong j=n; while(--j > i) { if(f[j] < v) { m =j; v=f[m]; } } swap2(&f[i],&f[m]); } } int main() { int a[]={7,4,3,0,5,3,2,5,8,4,3,2,5,4,3,5,4,5,3,2}; ulong i; selection_sort(a,20); for(i=0;i<20;i++) { printf("%d\r\n",a[i]); } return 0; }  ...
小张525 发布于 14小时前 阅读 2

Python 编码风格参考

代码除了用来运行外,更多的是用来读。本文仅是一个 Python 编码风格的参考。
Konghy 发布于 14小时前 阅读 10

完整的solr java api操作代码块

链接:http://blog.csdn.net/liuweitoo/article/details/8137023
爱运动的小乌龟 发布于 14小时前 阅读 6

在JNI中自C++回调Java

魔鬼藏在细节里
DDL007 发布于 15小时前 阅读 4

python输出不换行

python输出不换行 ========= **Python2的写法是**: ``` print 'hello', ``` **Python3的写法是**: ``` print('hello', end='') ``` **对于python2和python3都兼容的写法是:** ``` from __future__ import print_function print('hello', end='') ```
zhangqunshi 发布于 16小时前 阅读 3

python获取命令行参数

python获取命令行参数 ==== 主要是通过sys的argv列表来获取命令行内容,命令行的参数以空格分隔放到argv列表中。 ```python import sys if __name__ == "__main__": if len(sys.argv) > 0: print(sys.argv[0]) if len(sys.argv) > 1: print(sys.argv[1]) ``` @完
zhangqunshi 发布于 16小时前 阅读 1

现代c++开发利器folly教程系列之:dynamic

一、前言        用过python、php等动态类型语言的人肯定对动态数据类型不陌生。对于定义时不确定、运行时才确定的数据类型,使用动态类型是非常方便的。c++是一门不折不扣的静态类型语言,那么是否就无缘享受“动态”类型的好处了呢?不尽然。folly为我们提供了dynamic类型,从一定程度上实现了c++中的“动态”数据类型,为什么说是“一定程度上”呢,因为dynamic类型只支持c++中的基本类型(部分)和复合类型(array和map),不支持自定义类型。你可能会把dynamic和boost::any或std::any(将在c++17中支持)进行对比,但是其实它们没有可比性,首先是它们的实现原理不同。boost::any虽然可以盛放任何类型,但是它在实现上是用继承的方式进行了类型擦除,因此在还原类型时,需要程序员自己显示的提供类型信息,这也是boost::any的缺点之一。而dynamic虽然代表的类型有限,但是dynamic本身可以记住类型,便于赋值和还原。因此,dynamic不是boost::any的替代品,更像是一种补充,如果非要类比的话,dynamic和boost::variant更为相似。 二、类型支持       如前文所述,dynamic可以盛放的类型是有限的,它可以盛放部分基本类型、字符串类型、数组类型和OBJECT(本质为m...
黑客画家 发布于 1个月前 阅读 2466 评论 8 点赞 2

Java泛型总结

什么是泛型 --- 泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。 泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用object并在需要时再强制类型转换的机制具有更好的可读性和安全性。 泛型程序设计意味着程序可以被不同类型的对象重用,类似c++的模版。 泛型对于集合类尤其有用,如`ArrayList`。这里可能有疑问,既然泛型为了适应不同的对象,`ArrayList`本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个`Object`对象的数组。结果就是对List来说它只操作了一类对象`Object`,而在用户看来却可以保存不同的对象。 泛型提供了更好的解决办法——类型参数,如: ```js List list = new ArrayList(); ``` 这样解决了几个问题: 1 可读性,从字面上就可以判断集合中的内容类型; 2 类型检查,避免插入非法类型。 3 获取数据时不在需要强制类型转换。 泛型类 --- ```java public class Pair{ private T field1; } ``` 其中 `` 是类型参数定义。 使用时:`Pair p = new Pair();` 此时类内部的`field1`就是字符串类型了。 如果引用多个类型,可以使用逗号...
polly 发布于 1个月前 阅读 4515 评论 8 点赞 15

实机操作,由IBM的技术大咖带领如何在短时间内迅速上线人工智能应用,名额有限快来报名!”

本次活动还特别设有实机操作环节,由IBM的技术大咖带领开发者在短时间内迅速上线人工智能应用。另外在最后,大家还可以参观体验IBM的创新中心,切身体会技术给时代带来的改变。
IBM技术沙龙

SSM(十一) 基于dubbo的分布式架构

![dubbo.jpg](https://ooo.0o0.ooo/2017/04/06/58e649d664665.jpg) # 前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的`SSM`项目来让第一次接触的同学能快速上手。 # 浅谈分布式架构 `分布式架构`单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。 > 我们拿一个电商系统来说: ## 单系统 ![E65B5547-AF84-4D31-836D-72892C7AC7EA.png](https://ooo.0o0.ooo/2017/04/06/58e651937130f.png) 对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。 这时候所有的业务逻辑都是在一个项目中就可以满足。 ## 垂直拆分-多应用 ![QQ20170406-230056@2x.jpg](https://ooo.0o0.ooo/2017/04/06/58e65856cf18a.jpg) 当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用`Nginx`进行反向代理和简单的负载均衡。 ## SOA服务化 当整个系统以及发展的足够大的时候,比如一个电商系统中存在有: * 用户系统 * 订单系统 * 支付系统 * 物流系统 等系统。 如果每次修改了其中一个系统就要重新发布上线的话那么耦合就...
crossoverJie 发布于 2个月前 阅读 4163 评论 9 点赞 10

Google Protobuf 协议+Socket实现异步登录

> 背景:公司登录基础服务是C开发,业务是Java开发,需要Java调用C的服务验证登录、获取登录信息 > 实现方式: * 交互通过发送Socket通讯,socket连接池,Google Protobuf 协议,发送心跳保持TCP连接 * 自定义ExecutorCompletionService,实现一个包含Map>> https://github.com/shawntime/shawn-common-utils/tree/master/src/main/java/com/shawntime/common/socket ### Google Protobuf 协议定义 定义.proto文件:头文件(head_outer_class.proto)、登录(login_logic.proto)、心跳(login_proxy.proto) * 字段类型:bool,int32,float,double,string * 支持消息嵌套 * 支持enum * 索引号要按顺序指定 * 字段前缀:required:必须的;optional:可选的;repeated:可以重复的 ``` package qiqi; enum ENUM_HEAD_TYEP { enum_cs_head_type_cs = 0x1; //0x1表示CSHead enum_cs_head_type_sc = 0x2; //0x2表示SCHead enum_cs_head_type_ss = 0x3; //0x3表示SSHead }; enum ENUM_CS_HEAD_COMMAND { enum_cs_head_cmd_medal = 0x1; //勋章系统 enum_cs_head_cmd_login = 0x2; //登录系统 enum_cs_head_cmd_guild = 0x3; //公会推荐 enum_cs_head_cmd_user_info = 0x4; //用户信息 };...
shawntime 发布于 2个月前 阅读 2457 评论 11 点赞 1

Python进阶篇学习笔记二:Python模块

Python的强大之处有许多,其中重要的一点就是Python包含许多的第三方库。因此,懂得如何制作、导入自制模块或第三方模块就显得非常重要。此外,熟悉python模块的查看方式有利于编程者缩短python语言的学习使用时间。本文从python模块的制作、导入、查看和使用入手,重点介绍在WINDOWS环境下如何处理和使用python模块。最后一部分介绍一些python常用的模块供读者参考。
SamYjy 发布于 2个月前 阅读 2161 点赞 3

花十分钟时间给JFinal写了个talent-aio插件。。。

本人 JFinal脑残粉,最近公司几个项目都需要跟硬件交互,这就得用到长连接,之前一直没接触过该领域,本来还想花时间研究下netty,讲真挺难啃的,找资料的时候翻到 talent-aio,略微了解发现似乎学习成本极低,没想到作者本人也极其nice,解答我这个门外小伙子好多个问题,顺利用上此框架,刚好解了我的燃眉之急。 什么是 talent-aio? talent-aio是基于java aio实现的即时通讯框架,源于作者另一个久经考验的talent-nio框架,但在易用性、性能及代码可读性方面又远远超越了talent-nio。 顺便放上传送门:https://my.oschina.net/talenttan/blog/863545 废话不说,下面正题: 下载talent-aio的demo,demo极其简单,主要还是看HelloAbsAioHandler这个类的编码协议,剩下的就是看Aio的类了,api 貌似都在这。具体不介绍了,上面有链接,要注意的是Client端与Server端协议要一致。在这里说下我之前踩的坑,比如talent-aio的demo代码中的协议是有header的,Server端对客户端没有要求,但必须遵循交互协议,所以若是你用百度出来的socket实例连Server要注意,这里我们用回本身提供的Client代码就可以了。 导入talnet-aio依赖。 <dependency> <groupId>com.tale...
小徐同学 发布于 2个月前 阅读 5277 评论 26 点赞 25 打赏 1

长URL转短连接的简单设计与实现

非常多的时候,我们不想在分享的时候采用长长的链接,主要的原因有: URL太长占显示空间、难于输入,转成二维码点点小,难于识别 长的URL提供的信息太多,不利于信息安全,甚至容易造成倒库 其他理由...... 今天的理由不是重点,重点是如何用一点点代码实现这个短链接的生成。 我们的注意点有: 生成的短链接地址长度可调整,毕竟不能因为4位、5位、6位的长度变化就让我们重新写一套程序 要有防冲突处理机制,不能因为算法导致两个长链接地址生成的短地址一样就把前一个覆盖掉 有时候,一个地址用过之后觉得不需要使用了,哪么这个地址失效之后,短地址可以有效收回。 首先设计接口 /** * Created by luoguo on 2017/3/16. */ public interface UrlShortener { /** * 设置产生短链接长度 * @param length * @return */ void setLength(int length); /** * 返回短链接长度 * @return */ int getLength(); /** * 返回指定地址对应的短链接 * @param url * @return */ String get(String url); /** * 存储对应关系 * @param url * @param shortUrl */ voi...
悠悠然然 发布于 2个月前 阅读 4769 评论 38 点赞 4

使用 Elastic Stack 来监控和调优 Golang 应用程序

Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。   Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat、Packetbeat、Winlogbeat、Metricbeat 和新出的 Heartbeat,呵呵,有点多吧,恩,每个 beat 做的事情不一样,没关系,今天主要用到 Elasticsearch、Metricbeat 和 Kibana 就行了。   Metricbeat 是一个专门用来获取服务器或应用服务内部运行指标数据的收集程序,也是 Golang 写的,部署包比较小才10M 左右,对目标服务器的部署环境也没有依赖,内存资源占用和 CPU 开销也较小,目前除了可以监控服务器本身的资源使用情况外,还支持常见的应用服务器和服务,目前支持列表如下: Apache Module Couchbase Module Docker Module HAProxy Module kafka Module MongoDB Module MySQL Module Nginx Module PostgreSQL Module Prometheus Module Redis Modu...
Medcl 发布于 3个月前 阅读 2387 评论 18 点赞 12

聊聊Java的泛型及实现

和C++以模板来实现静多态不同,Java基于运行时支持选择了泛型,两者的实现原理大相庭径。C++可以支持基本类型作为模板参数,Java却只能接受类作为泛型参数;Java可以在泛型类的方法中取得自己泛型参数的Class类型,C++只能由编译器推断在不为人知的地方生成新的类,对于特定的模板参数你只能使用特化。在本文中我主要想聊聊泛型的实现原理和一些高级特性。
suemi94 发布于 3个月前 阅读 2714 评论 11 点赞 5

C#开发人员应该知道的13件事情

本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助。 1. 开发过程 开发过程是错误和缺陷开始的地方。使用工具可以帮助你在发布之后,解决掉一些问题。 编码标准 遵照编码标准可以编写出更多可维护的代码,特别是在由多个开发人员或团队编写和维护的代码库中。例如FxCop,StyleCop和ReSharper等,就是常用的实施编码标准的工具。 开发人员:在压缩代码之前,请使用工具仔细检查是否违反了标准,并且对结果进行分析。使用工具发现的代码路径问题,不比你预期的少。 代码审查 代码审查和结对编程是任务开发人员审查他人编写的源代码的常见做法。通过这些方式希望能够检查出作者的错误,如编码错误或实现错误。 代码审查是一个很有价值的做法,但是它依赖于人类,易犯错误,所以很难扩展。 静态分析 静态分析工具会在不运行代码的情况下分析代码,在不需要编写测试用例的情况下,查找违反编码标准或存在缺陷的问题。它们能有效地找到问题,但你需要选择出那些能够定位出有价值问题的工具,找出有价值的问题。C#静态分析工具包括Coverity,CAT.NET和Visual Studio代码分析。 动态分析 动态分析工具在运行时分析代码,帮助你查找缺陷,如安全漏洞,性能和并发...
葡萄城控件技术团队 发布于 3个月前 阅读 2824 评论 16 点赞 9

匈牙利算法,KM算法详解及java实现

匈牙利算法,KM算法详解及java实现;2016华为软件精英挑战赛,思路总结之KM算法求解指派问题;
husthang 发布于 3个月前 阅读 1917 评论 7 点赞 4 打赏 1

Java借助CountDownLatch完成异步回调

public class AsyncDemo { private static void doSomeTask() { System.out.println("Hello World"); } private static void onCompletion() { System.out.println("All tasks finished"); } public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); final CountDownLatch latch = new CountDownLatch(2); executor.execute(new Task(latch)); executor.execute(new Task(latch)); executor.execute(() -> { try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } onCompletion(); }); executor.shutdown(); } private static class Task implements Runnable { /** * CountDownLatch 是JDK提供的一个简单的线程监测工具 * 基于简单的计数,调用countDown()方法表明当前线程已经终止 * 在监测线程中调用await()方法,该方法会一直挂起直到所有其它线程终止...
Acce1erator 发布于 4个月前 阅读 1644 评论 2

一个大对象引起的血案,GC的踩坑实录

踩过很多次GC的坑,基本每次性能问题,除了数据库,其它高发地区就是GC问题了
爱吃大肉包 发布于 4个月前 阅读 5332 评论 15 点赞 4

jdk1.8的HashMap和ConcurrentHashMap

本文针对jdk1.8的ConcurrentHashMap # 1 1.8的HashMap设计 ## 1.1 整体概览 HashMap采用的是**数组+链表+红黑树**的形式。 数组是可以扩容的,链表也是转化为红黑树的,这2种方式都可以承载更多的数据。 用户可以设置的参数:初始总容量默认16,默认的加载因子0.75 初始的数组个数默认是16 容量X加载因子=阈值 一旦目前容量超过该阈值,则执行扩容操作。 什么时候扩容? - 1 当前容量超过阈值 - 2 当链表中元素个数超过默认设定(8个),当数组的大小还未超过64的时候,此时进行数组的扩容,如果超过则将链表转化成红黑树 什么时候链表转化为红黑树?(上面已经提到了) - 当数组大小已经超过64并且链表中的元素个数超过默认设定(8个)时,将链表转化为红黑树 目前形象的表示数组中的一个元素称为一个桶 ## 1.2 put过程 - 根据key计算出hash值 - hash值&(数组长度-1)得到所在数组的index - 如果该index位置的Node元素不存在,则直接创建一个新的Node - 如果该index位置的Node元素是TreeNode类型即红黑树类型了,则直接按照红黑树的插入方式进行插入 - 如果该index位置的Node元素是非TreeNode类型则,则按照链表的形式进行插入操作 链表插入操作完成后,判断是否超过阈值...
乒乓狂魔 发布于 5个月前 阅读 6143 评论 24 点赞 13

PageRank算法计算网页的价值

现假设有A,B,C,D,E五个网页,其中 1)  A网页有链接指向B,C,D,E 2)  B网页有链接指向A,D 3)  C网页有链接指向A,D 4)  D网页有链接指向C 5)  E网页有链接指向A,C A 请写出这个网页链接结构的Google矩阵,目测你认为哪个页面的重要性(PR值)最高? B 手动或编程计算这5个页面的PR值,可以使用任何你熟悉的编程语言; C 指出当页面较多的时候,计算PR的主要困难在什么地方,Map-Reduce是怎么解决这个难题的? 一、Google矩阵 将上述问题进行数学建模,如下: 二、网页价值计算(计算PageRank值) PageRank算法的数学原理如下: 得到初始矩阵后,我们就可以得到PR值,当只有a概率的用户会点击网页链接,剩下(1-a)概率的用户会跳到无关的页面上去,而访问的页面恰好是这5个页面中A的概率只有(1-a)/5(a是阻尼系数,Google取a等于0.85),所以真正的Google矩阵 : 于是得到q(n)=G*q(n-1),特征向量q的初始值为值为1的5*1矩阵,直到q(n)=q(n-1),q(n)就是PR的值。 将上述的思想抽象成一个数学函数: 当f(n+1)约等于f(n),此时的PageRank值即为f(n)。 三、编程实现 public class PageRank { /** * 矩阵g乘以矩阵p * @param g * @param p * @return 矩阵...
灯下黑鬼吹灯 发布于 6个月前 阅读 2542 评论 17 点赞 4

秒杀 tj/co 的 hprose 协程库

ES6 中引入了 Generator,Generator 通过封装之后,可以作为协程来进行使用。 其中对 Generator 封装最为著名的当属 tj/co,但是 tj/co 跟 ES2016 的 async/await 相比的话,还存在一些比较严重的缺陷。 hprose 中也引入了对 Generator 封装的协程支持,但是比 tj/co 更加完善,下面我们就来详细介绍一下它们之间的差别。
andot 发布于 6个月前 阅读 2411 评论 25 点赞 9

springboot(六):如何优雅的使用mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料,各种各样的形式都有,看的人心累,结合了mybatis的官方demo和文档终于找到了最简的两种模式,花了一天时间总结后分享出来。 orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开发中可以根据需求灵活使用。发现一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis。 hibernate特点就是所有的sql都用Java代码来生成,不用跳出程序去写(看)sql,有着编程的完整性,发展到最顶端就是spring data jpa这种模式了,基本上根据方法名就可以生成对应的sql了,有不太了解的可以看我的上篇文章[springboot(五):spring data jpa的使用](http://www.ityouknow.com/springboot/2016/08/20/springboot(%E4%BA%94)-spring-data-jpa%E7%9A%84%E4%BD%BF%E7%94%A8.html)。 mybatis初期使用比较麻烦,需要各种配置文件、实...
纯洁的微笑 发布于 7个月前 阅读 5585 评论 41 点赞 16

工作中常用到的Java反射

这次提到的Java反射涉及的代码比较多。因为工作中经常用到反射,对代码做了很多抽象以及过滤器。虽然代码量很多,但是简单易用,过滤插件也易修改。 下面介绍下工作中哪些地方比较容易用到反射。比如插件或者过滤器,如果抽象的子类比较少,配置成XML等结构也是可以达到同样的效果。如果希望灵活一些,添加了插件或者过滤器代码子类后希望可以直接使用。可能反射会比较好点,通过扫描所有class或者jar文件,得到所有继承的子类。如果每次调用都扫描所有的文件会比较影响性能。所以在实现里面加入反射缓存,对所要获取反射子类时涉及的所有参数作为一个key缓存所有的反射结果。下次如果是同样的key,就不在重新扫描。 代码示例如下: public static void main(String[] args) { //设置扫描范围,可以是class文件所在位置例如bin下或者是mysql开头或者mysql结尾的jar, //设置为""为全部都扫描,这种比较耗时 ReflectUtils.createSharedReflections("classes", "bin", "mysql"); try { //调试阶段可以设置每次都全扫描 //Beans.setDesignTime(true); final Collection<String> subTypes = ReflectUtils.listSubClass(IA.class);// for (final String subTy...
李岩飞 发布于 7个月前 阅读 5393 评论 7 点赞 7

Java中如何使用嵌入MySQL

这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作。但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件。再去安装数据库可能就比较麻烦了。 其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代码的方式启动或者关闭。下面提供一些代码片段,具体的会提供下载地址。 这个是核心代码类,这个类实现了Mysql 的启动和停止以及数据库的启动状态。 package net.simple.mysql; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; import com.mysql.management.MysqldResource; /** * * @author 李岩飞 * @email eliyanfei@126.com * 2016年11月2日 下午1:44:55 * */ public final class EmbedMySqlServer { private MysqldResource mysqlInstance; //配置信息 public final Properties props; //端口信息 private String port; /** * 考虑到数据库的性能问题,允许将数据库放在其它磁盘 */ private String embedMySqlHome; public EmbedMySqlServer(final Properties props) {...
李岩飞 发布于 7个月前 阅读 4800 评论 26 点赞 10

解析Makefile文件的构建规则

Makefile 编辑一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的唯一的一件事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。 make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在...
1071954237 发布于 7个月前 阅读 1665 评论 4 点赞 4
顶部