开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

关于perl6的若干问题?

20年磨一剑,在perl人艰苦卓绝的努力perl 6终于在2016年圣诞节推出了正式版本V6.c版本(c代表圣#...
桔子 发布于 2天前 阅读 94 点赞 1

使用PF4J实现插件化系统-入门

在进行业务平台型系统开发时,常常遇到接口大致相同,但是不同的业务的场景,其实现却有所不同。在分工方面,不同的业务场景,可能是不同的开发人员。这时就可以通过插件化的方式,针对不同的业务场景,实现不同的插件,来满足业务的需求。 PF4J是一个Java轻量级的插件框架,使用PF4J可以轻松的将一个Java应用转成一个插件化的应用。其拥有最小的依赖关系和很强的扩展性。 GitHub地址:https://github.com/decebals/pf4j ```xml ro.fortsoft.pf4j pf4j ${pf4j.version} ``` 目前pf4j的最新是1.3.0。以下示例我们都以这个版本为例。 ## 工程结构 ![pf4j-plugin-demo](http://yywang.qiniudn.com/pf4j-plugin-demo.png) 插件化的工程结构如上: - api:定义可扩展的接口,其他插件实现这里所定义的接口。在实际的工程中,定义可扩展点的接口是比较难的地方 - app:运行程序,这里是程序的入口。插件直接拷贝至指定的目录,app就可以找到指定的插件 - plugins:插件模块,这里实现api中所定义的接口。在实际的工程中,这部分可以是单独的代码库,其依赖api以及项目的一些基础模块 ## 定义可扩展接口 我们先来定义api的接口 ```java public interface Greeting extends Extens...
wangyan9110 发布于 1周前 阅读 188

java基于poi实现快速操作Excel的工具[v2.0.0]

java快速操作Excel工具,快速实现绚丽导出Excel
螃蟹以死 发布于 1周前 阅读 722 评论 4 点赞 1

log4j日志写入redis扩展实现(log4j-redis-appender)

log4j日志写入redis扩展
螃蟹以死 发布于 2周前 阅读 683 评论 10 点赞 1

java lambda方法引用总结——烧脑吃透

lambda是java8的新特性,基本使用比较容易理解,但有一个环节遇到了坎儿,那就是方法引用,尤其是类的实例方法引用,烧脑之后总结一下。 在需要函数参数的方法中,我们可以把另一个同类型的方法直接传入,这称为方法引用的绑定。类似于C语言中的函数指针。 lambda表达式可以替代方法引用;或者说方法引用是lambda的一种特例,方法引用不可以控制传递参数。 ### 4.1) 构造器引用 ```java private Person construntorRef(Supplier sup){ Person p=sup.get(); return p; } @Test public void testConstructorRef(){ Person p=construntorRef(Person::new); System.out.println(p); } ``` 需要有无参的构造器。 ### 4.2) 静态方法引用 ```java private static void print(String s){ System.out.println(s); } @Test public void testStaticRef(){ Arrays.asList("aa","bb","cc").forEach(TestMethodReference::print); } ``` so easy,只要静态方法的参数列表和FI需要的参数一致就可以。 ### 4.3) 成员方法引用 ```java @Test public void testMemberMethodRef(){ Arrays.asList("aa","bb","cc").forEach(System.out::println); } ``` so easy,只要成员方法的参数列表和FI需...
polly 发布于 2周前 阅读 3426 评论 18 点赞 7

学习 Kotlin 的 20 个实用资源

Кotlin 是在 Java VM 上运行的现代编程语言,它的语法优雅,可与现有的 Java 库互操作。 在 2017 年 Google I/O 中,Android 团队宣布将 Kotlin 作为 Android 平台的官方编程语言。 为了帮助你学习和了解 Kotlin ,本文整理出了 Kotlin 学习资源列表,当中没有任何付费课程或书籍,列表中的所有内容都是 100% 免费。(含外境资源,请自备梯子) 一、教程类 The Kotlin Website - Kotlin 官网 Kotlin 官方网站是学习 Kotlin 好去处。在参考部分,你可以找到该语言的所有概念和功能的深入解析文档。在教程部分有关于设置工作环境并使用编译器的实用分步指南。 这里还有个 Kotlin 编译器,是一个浏览器 APP,你可以在上面尝试使用这门语言。它能加载许多示例,包括 Koans 课程 — 这是目前熟悉 Kotlin 语法的最好方式。 Keddit: Learn Kotlin while developing an Android App - 通过安卓 app 开发学习 Kotlin 这是由 Juan Ignacio Saravia 发表的系列作品,包含 11 个部分。他将 Kotlin 投入使用,构建了一个 Reddit 克隆版 app。该教程涵盖的主题内容广泛,从设置工作区到 API 的使用,甚至包括单元测试。 Antonio Leiva's Blog - Antonio Leiva 博客 Antonio Leiva ...
编辑部的故事 发布于 3周前 阅读 7695 评论 48 点赞 9

yii2的上传只需这一篇技术文就足够了

> 很多新人对上传这种操作有些害怕、摸不着头脑,今天阿北带你学习一边yii2 UploadFile类,看看yii2如何帮你轻松的完成上传操作。 老样子,先来个目录 - 初步熟悉UploadedFile类 - 从Model开始的上传 - 没有Model的上传 # UploadedFile类 UploadedFile类位于 vendor/yiisoft/yii2/web/UploadedFile.php 它提供了比如 **getInstance**、**getInstances**、**getInstanceByName**、**saveAs**等诸多方法 详情可以参考速查表 http://nai8.me/tool-sc.html#section-23 # 从Model开始的上传 我们先来设计一个简单的会员表,实现对其头像的上传功能。 ![输入图片说明](https://static.oschina.net/uploads/img/201706/06141621_2YaT.jpg "在这里输入图片标题") 然后我们新建一个action并写下如下代码。 ```php // @app/FileController.php public function actionIndex(){ $model = User::findOne(1); if(Yii::$app->request->isPost){ $file = UploadedFile::getInstance($model,'avatar'); var_dump($file); } return $this->render('index',[ 'model'=>$model ]); // 视图里代码 field($model,'avatar')->fileInput();?> } ``` 其实UploadedFile只是对上传文件信息的再次封装并...
阿北2017 发布于 3周前 阅读 250 评论 1

即时通讯框架T-io之WebSocket协议再之HelloWorld

一.t-io是干嘛的 ---------- ---------- 这个框架已经开源到码云上面,介绍比较详细,链接:[https://git.oschina.net/tywo45/t-io](https://git.oschina.net/tywo45/t-io),由于官方介绍中的入门程序客户端和服务端都是用的java写的,而且是用简单的自定义TCP协议进行通信的,也有一个websocket协议的列子,感觉有点复杂,不好入门。就想着使用javascript来做客户端,t-io做服务端,采用websocket协议搞一个helloworld。 二.WebSocket协议咋回事 ---------------- ---------- 首先,t-io框架简单说就是封装一下些个: - 内置心跳检测 - 内置心跳发送 - 各种便捷的绑定API - 各种便捷的发送API - 一行代码拥有自动重连功能 - 各项消息统计等功能,全部一键内置搞定,省却各种烦恼 所以我们收到客户端发来的websocket协议的包,在服务端就要做对应的解包,那我们还要了解websocket包的结构和通信建立的过程: ①握手阶段: 客户端和服务器建立TCP连接之后,客户端发送握手请求,随后服务器发送握手响应即完成握手阶段。如下: 客户端握手请求类似如下: ``` GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHM...
邹海清 发布于 3周前 阅读 780 评论 7 点赞 1

extern关键字详解

extern的本质、使用的场景、使用中注意事项
沙米笔记 发布于 3周前 阅读 207 评论 3

Yii2基础版程序多模块二级域名部署方案以及urlManager对二级域名绝对地址的改造方法

> 这似乎是个老生常谈的问题,那就再谈一次吧,本文我们要完成两件事件。 完成的任务 - 将模块二级域名化 - 让urlManager支持二级域名 # 将模块二级域名化 我们有这样的两个模块,分别是 **admin** 和 **wechat** ,接下来想做一件事情 ```php http://wechat.abc.com ===> wechat http://admin.abc.com ===> admin ``` 废话少说,开始干货~? ## 解析一个二级域名 我们以 **admin** 为例,首先要解析 http://admin.abc.com ,在各种云的域名控制面板。 ## 配置 config/web.php 修改 **urlManager** 配置项 ```php 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'http://admin.abc.com'=>'admin',// 方法一 直接指定 'http://<_m:(sys|admin|photo)>.abc.com'=>'<_m>' //方法二 多个二级域名同时适配也可以 ], ], ``` ## 完了么? 恩,完了,多模块的二级域名部署就可以了,阿北知道你一定认为此文为标题党,干嘛写这么有深度的标题那???? 其实二级域名的部署并不复杂,复杂在部署后所引发的一些列问题,这种问题可能是需求上的,可能是技术上的。 接下来就举一个需求上的例子。 # 二级域名管理问题 我们推荐使用urlManager来生成链...
阿北2017 发布于 4周前 阅读 198

程序日志由浅入深(Go语言描述)

程序中记录日志的首要目的:Troubleshooting。通过记录程序中对外部系统与模块的依赖调用、重要状态信息的变化、关键变量、关键逻辑等,显示基于时间轴的程序运行轨迹,显示业务是否正常、是否存在非预期执行,在出问题时方便还原现场,推断程序运行过程、理清问题的方向。
RiboseYim 发布于 1个月前 阅读 571

Laravel学习笔记之基于PHPStorm编辑器的Laravel开发

引言 本文主要讲述在PHPStorm编辑器中如何使用PHPStorm的Laravel插件和Laravel IDE Helper来开发Laravel程序,结合个人积累的一点经验来说明使用PHPStorm编辑器来开发程序还是很顺手的,内容主要基于PHPStorm官方文档Laravel Development using PhpStorm。 学习主题 本文主要涉及以下几个技巧: Composer的初始化 Laravel IDE Helper的安装 Laravel Plugin的安装 PHPStorm对Laravel框架的支持 PHPStorm对Blade模板引擎的支持 使用PHPStorm调试Laravel程序 使用PHPStorm的单元测试功能 使用PHPStorm的数据库功能 1、一些准备工作 (1)、初始化composer PHPStorm提供了composer配置功能,可以在PHPStorm新建一个空项目,然后在空项目根目录右键选择Composer|Init Composer...,然后点击从getcomposer.org网上下载,PHPStorm会自动下载composer.phar文件,并在项目根目录下生成composer.json文件,速度也很快: 对于composer.json文件中数组key字段值可以在Composer官网上查找相关解释,包括重要的require和require-dev字段解释。 (2)、安装Laravel IDE Helper 安装也很简单,还是在项目根目录右键找到Composer选择Add Dependancy...,搜索laravel-ide-helper选择安装就行,如果...
slagga 发布于 1个月前 阅读 375 评论 3 点赞 1

yii2事件的解绑和级别概念

> 感谢你坚持读到这里,本篇是“Yii2事件研究”的最后一篇分享,我将继续在讲故事的同时轻松帮你学会事件机制的相关知识。 在这里我们先总结一下 # 忆往昔 第一篇:**[什么是事件](http://nai8.me/sapper-view.html?id=66)**,其实事件并不难,我们每天用的js都是基于事件的,点击按钮后的一系列行为都是事件处理器。 第二篇:**[学好事件,先学学观察者模式](http://nai8.me/sapper-view.html?id=67)**,挖根源,在进入事件前我们先学习了“观察者模式”,让你从原理上明白事件的流程,你学会了这种出镜率非常高的设计模式。 第三篇:**[一个活生生的Yii2事件例子](http://nai8.me/sapper-view.html?id=68)**,从一个实际有趣的例子引入,通过北哥和经理之间的博弈,让你在轻松中了解事件、学习yii事件常用方法、知道事件的运用场景等。 第四篇:**[学了两年半,Yii2的内置事件知多少?](http://nai8.me/sapper-view.html?id=70)**,yii是很贴心的,本篇为你讲解如何寻找yii提供的41种内置事件,以及具体如何去使用它们。 第五篇:**[处处蚊子咬,绑定事件知多少?](http://nai8.me/sapper-view.html?id=71)**,通过这篇我们知道了事件处理器的四种类型,以及事件阻断和事...
阿北2017 发布于 1个月前 阅读 45

光看这几个语法糖,就值得你试试Kotlin

最近这几天注意到Kotlin.试了一下,把现在的Java项目翻译成Kotlin,感觉很爽.算是浅尝辄止.见笑. 第一:Null Safety 这个语法糖很适合写Android程序. 比如 if (a != null){ return a.b; } else{ return null; }  上面这个很简单,可以直接用一个三元运算符解决.而如果是下面这种情况呢 a.b.c.d java就要写成这种形式 if (a == null){ return null; } if (a.b == null){ return null; } if (a.b.c == null){ return null; } return a.b.c.d 而如果用Kotlin,可以直接 a?.b?.c?.d 有没有一行更比多行强的感觉? 第二: ==和===运算 在Java中,我们要判断两个字符串是否相同. a.equals(b) //很简单,但是如果a是空,则抛出空指针异常 中Kotlin中  a==b 在语义上等于 a?.equals(b) ?: (b === null) 上面这句的意思 1先判断是a是不是空,如果a等于空,则返回b是否等于空引用. 2如果a不等空,则调用equals a==b 这个和C# 中行为一致. 第三 Linq style 语法 想像一下,如果你想在Java 7 中实现这样一个功能. 查找列中电话或人名以XX开头,且电话和人名不为空的记录,将符合条件的记录以列表的形式返回. 这个功能在Java7中估计要写很多行吧.Java8中可能要简单一此.而在Kotlin中 var ...
wynwyy 发布于 1个月前 阅读 140 评论 2

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

> 接上回,上次的更改小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 发布于 1个月前 阅读 343 评论 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个月前 阅读 268 评论 1 点赞 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 发布于 1个月前 阅读 497 评论 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,这样“余弦定理”就简化...
国栋 发布于 1个月前 阅读 249 评论 8

关于消息变更的最佳实践

java 观察者模式 消息变更
xpbob 发布于 1个月前 阅读 268

如何使用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 发布于 1个月前 阅读 826 评论 19 点赞 1

Git commit message和工作流规范

统一团队Git commit日志标准,便于后续代码review,版本发布以及日志自动化生成等等。 统一团队的Git工作流,包括分支使用、tag规范、issue等。
腾讯云技术社区 发布于 3个月前 阅读 16

Qt学习笔记(6)——自定义菜单

在前面的笔记中我们了解到在工具栏中可以添加任意部件,那菜单中是否也可以达到同样的目的呢?答案是可以的,下面咱们一起来建立这样的一个工程试试!
hippieZhou 发布于 3年前 阅读 53

java webservice

Web Service概述 什么是Web Service        Web Service是能够基于网络,尤其是基于万维网(World Wide Web)直接调用的能够处理离散任务或连续任务的软件模型。目前较为流行的应用是,由一家公司对其专有数据进行封装,提供Web Service,然后其它公司就可以通过Internet来动态使用这些在线服务。这为未来全球的电子商务发展提供了新的标准和架构。 Web Service架构 Web Service是独立的、模块化的应用,能够通过因特网来描述、发布、定位以及调用。在Web Service的体系架构中包括三个角色:服务提供者(Service Provider)、服务请求者(Service Requestor)、服务注册器(Service Registry)。角色间主要有三个操作:发布(Publish)、查找(Find)、绑定(Bind)。 下图清楚的描述了三种角色,以及角色之间的作用关系。 图示一: 图示二: 这个流程图显示了Web Services中的核心技术是如何工作的。   这里,Provider是提供服务的应用程序组件,Requester是使用服务的客户端程序。很多其他技术也会参与到交互中,但是这个图只 显示了在Web Services环境中必需的核心技术组件。 Web Service协议标准 简单对象访问协议(SOAP)        SOAP是Simple Object Access Protoc...
追梦java 发布于 3年前 阅读 144

SIP Servlet开发实例讲解

这篇博文的开发实例是必须基于前面一篇“SIP Servlet开发环境配置”,如果没有正确配置SIP Servlet开发环境的,请参考“SIP Servlet开发环境配置”篇。               首先,我们基于上一篇中提到的方法创建一个叫“SipTest”的dynamic Web Project工程,如下图所示:                在这个工程中,有个文件非常重要,那就是WEB-INF目录下的sip.xml文件,它是整个SIP Servlet工程的启动初始化参数加载文件。里面包含了Sip Servlet在容器中加载的名称以及由那个类来处理SIP请求和响应。在这个工程中的sip.xml文件如下图所示:                 其中的<servlet-name>中名称必须要和<main-sipservlet>保持一致。因为SIP Servlet是Http Servlet和SIP Servlet的混合体,在Http Servlet的初始化过程中,我们需要去查询我们所注册的Sip Servlet的名称,这时查询的名称要与这个地方提到的<servlet-name>名称相同,具体见下图中红色框图部分:                          只有保持这个地方的一致,才能保证能够正确的从Servlet上下文中获取到SipFactory实例对象从而完成后面的Sip Request之类的实例构造。      ...
TreasureWe 发布于 2年前 阅读 579 评论 1 点赞 1

java8之lambda表达式(变量作用域)

通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 {     public static void main(String[] args) {         repeatMessage("Hello", 20);     }     public static void repeatMessage(String text,int count){         Runnable r = () -> {             for(int i = 0; i < count; i++){                 System.out.println(text);                 Thread.yield();             }         };         new Thread(r).start();     } } 注意看lambda表达式中的变量count和text,它们并没有在lambda表达式中被定义,而是方法repeatMessage的参数变量。如果你思考一下,就会发现这里有一些隐含的东西。lambda表达式可能会在repeatMessage返回之后才运行,此时参数变量已经消失了。如果保留text和count变量会怎样呢? 为了理解这一点,我们需要对lambda表达式有更深入的理解。一个lambda表达式包括三个部分: 一段代码 参数 自由变量的值,这里的“自由”指的是那些不...
柳哥 发布于 2年前 阅读 4836 评论 15 点赞 4

新书《MyBatis 从入门到精通》

# 新书《MyBatis 从入门到精通》 自2013 年起,我开始带领团队开发项目,公司此前使用的是一套深度集成的Spring、Struts 和Hibernate 框架,这套重量级框架显然已经不适合用在全新的项目中。当时使用的Hibernate 还是较早的版本,在项目的业务层需要拼接大量的SQL 和HQL 才能进行数据库操作。综合多 方面因素,我决定选择其他持久化框架进行项目开发。因为MyBatis SQL 和代码分离的方式以 及动态SQL 的强大功能,加之其在对查询结果进行映射处理等方面具有显著优点,因此,我与 MyBatis 开始结缘。 为了提高查询效率,通常会采用物理分页,然而MyBatis 只能支持内存分页。若想让MyBatis 支持物理分页,只能通过基于拦截器的插件来实现。当时,已有的MyBatis 分页插件都不适用 于公司已经开发了大半的项目,因此我有了自己写一个分页插件的想法。完成后的分页插件 (PageHelper)能很方便地实现对MyBatis 查询方法的分页。后来,我在CSDN 和开源中国的 博客中分享了代码,并且详细说明了实现原理。在后续更新插件的一篇博客评论中,红薯(开 源中国创始人)说:“应该把代码放到git.oschina.net 中,放网盘很不专业哦!”因为这句话,我 便踏入了开源的世界。 由于PageHelpe...
Liuzh_533 发布于 4天前 阅读 249 评论 10

Go项目开发----2048小游戏

刚接触go语言不久,前段时间看到一个2048的项目开发教程,于是就试着练了下手。我的环境采用的是Ubuntu Linux环境。
LSoam 发布于 3年前 阅读 122

Java8 学习

每次写完代码不是一阵阵成就感,反而是挫败感加强,为什么呢?原因就是Java8特性没有使用上,导致代码的警告随处可见,作为一个程序员是不允许出现不完美的东西的,所以学习Java8迫在眉睫。啊,我一定要改变习惯,使用Java8,喊喊口号可能对自己有点安慰。
learn_more 发布于 12个月前 阅读 282

Django关于模型详解

简介 模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。 基础: 每个模型都是django.db.models.Model 的一个Python 子类。 模型的每个属性都表示为数据库中的一个字段。 Django 提供一套自动生成的用于数据库访问的API。 这个例子定义一个Person模型,它有first_name 和last_name 两个属性: from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) 一些技术上的注意事项: 这个表的名称myapp_person,是根据模型中的元数据自动生成的,也可以重写为别的名称。 id 字段是自动添加的,但这个行为可以被重写。 字段类型 详见博客:Django模型字段类型详解 字段选项 详见博客:Django模型字段选项详解 关系  Django 提供了三种最常见的数据库关系:多对一(many-to-one),多对多(many-to-many),一对一(one-to-one)。 多对一关系 Django 使用 django.db.models.ForeignKey 定义多对一关系。和使用其它字段类型一样:在模型当中把它做为一个类属性包含进来。 ForeignKey 需要一个位置参数...
for-in 发布于 9个月前 阅读 150

java cp命令:命令行指定需要加载的类classpath

java cp命令 转载:http://hck.iteye.com/blog/1566801 java -cp .;c:\dir1\lib.jar Test      -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”分隔,linux上是分号“:”分隔。用一点“.”代表当前路径。   虽然现在都有eclipse之类的IDE了,但有时候后会手工编译和运行一些程序,很多人包括多年开发经验的人都不知道怎么在命令行参   数运行类。有点杯具……   使用范例:   java -cp ..\lib\hsqldb.jar org.hsqldb.Server -database mydb    或    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb    写法:  java -cp .;myClass.jar packname.mainclassname    classpath中的jar文件能使用通配符; 要指定各个JAR文件具体的存放路径,相同路径有多个可使用通配符 。 运行jar 里面的一个class。 java -cp .;c:\classes\myClass.jar;d:\classes\*.jar packname.mainclassname  但是如果你设置了仍然找不到,可以参考如下博文解决。 https://my.oschina.net/u/2308739/blog/663502 bat文件写法:  java -cp MinusYHD.jar minusyhd.Mi...
Oscarfff 发布于 1年前 阅读 1078 点赞 1

wxpython基本控件

本文介绍了wxpython基本控件的各类、参数说明以及操作方法。
若然_leong 发布于 3年前 阅读 280

Kotlin真的会取代JAVA吗?

自从Kotlin 成为 Android 开发一级语言,Kotlin确实以其实用,高效赢得了海外很多公司和开发者的认可,比如Square的Jake大神一直在推Kotlin。Kotlin在国外至少有将近2年的应用生产环境的实践(非JetBrains内部实践应用)。在移动开发中,相比iOS程序员,Android程序员总是很幸运,因为我们有很多优秀好用的工具(Android Studio等),选用Kotlin,则是Google 为开发者提供高效的开发工具的一贯作风。
_夜枫 发布于 3周前 阅读 4

关于php中一些字符串的一些面试题的总结

1.//字符串的反转函数 $str='hello';//---->olleh echo strrev($str).'<br />';//这是系统提供的函数 //下来自己写一个函数来实现反转 $strArr = str_split($str);//Array ( [0] => h [1] => e [2] => l [3] => l [4] => o ) $str1=''; for($i=count($strArr)-1; $i>=0; $i--){        $str1.=$strArr[$i]; } echo $str1; 2.//获取文件的后缀名  .jpg或者jpg都可以 $file='abc.exe.jpg'; echo strrchr($file,'.').'<br />';//这个是使用的系统函数,查找的文件名 echo strrev(strstr(strrev($file),'.',true)).'<br />';//strstr()返回的是字符串首次出现,加上true表示返回的是. 之前的字符串 echo substr($file,strrpos($file,'.')).'<br />';//strrpos()返回的是最后一次.出现的位置,然后在进行截取 $strArr=explode('.',$file); echo $strArr[count($strArr)-1].'<br />';//explode()函数将字符串按点分割成一个数组 //echo array_pop($strArr).'<br />'; //echo end($strArr).'<br />'; echo  pathinfo($file,PATHINFO_EXTENSION).'<br /> ';//pathinfo()函数返回的是文件的路径的信息 echo strrev(subs...
mirrorgdit 发布于 1年前 阅读 108 点赞 1

vundle for windows

简单描述vundle for windows的配置
红星闪闪 发布于 2年前 阅读 40

Netty源码分析(一)概览

准备将Netty的源码过一下,一来对自己是个总结消化的过程,二来希望对那些打算看Netty源码的人(已经熟悉Netty的Reactor模型)能有一些帮助。目前所看Netty版本是4.1.3.Final。 # 1 目录 - [Netty概览](http://my.oschina.net/pingpangkuangmo/blog/734051) - [EventLoopGroup分析](http://my.oschina.net/pingpangkuangmo/blog/742929) # 2 概览 ## 2.1 服务器端demo 看下一个简单的Netty服务器端的例子 public static void main(String[] args){ EventLoopGroup bossGroup=new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap=new ServerBootstrap(); serverBootstrap.group(bossGroup,workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 200) .childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(80,0,4,0,4)); ch.pipeline().addLast(new StringDecoder(Charset.forName("UTF-8"))); ch.pipeline().addLast(new TcpServerHand...
乒乓狂魔 发布于 10个月前 阅读 233

Java项目经验——程序员成长的钥匙

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1、掌握项目开发的基本步骤 2、具备极强的面向对象的分析与设计技巧 3、掌握用例驱动、以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法! 关于基础tb知识: 你可以看看这些名词或知识点,看是否能说出个一二三四来。 JavaSE ----基本语法、数据类型、操作符等:int、long、Integer、Long、if、else、for、while ----面向对象:class(类)、Object(对象)、instance(实例)、state(状态)、behavior(行为)、field、method、new、可见性(访问控制)、attribute、property、package、import、static variable、class variable、instance variable、heap、method area、stack、GC(垃圾回收)、override、overload、对象转型(casting)、多态、this、super ----异常处理:理解编译期错误和...
Java程序员-10 发布于 2周前 阅读 223

Windows CMD 中的几个基本操作总结

Windows CMD 中的几个基本操作总结
北风其凉 发布于 3年前 阅读 80 点赞 1

Netty源码分析(二)EventLoopGroup分析

准备将Netty的源码过一下,一来对自己是个总结消化的过程,二来希望对那些打算看Netty源码的人(已经熟悉Netty的Reactor模型)能有一些帮助。目前所看Netty版本是4.1.3.Final。 # 1 目录 - [Netty概览](http://my.oschina.net/pingpangkuangmo/blog/734051) - [EventLoopGroup分析](http://my.oschina.net/pingpangkuangmo/blog/742929) # 2 EventLoopGroup和EventLoop介绍 ## 2.1 EventLoopGroup介绍 在前面一篇文章中提到了,EventLoopGroup主要负责2个事情,这里再重复下: 它主要包含2个方面的功能,注册Channel和执行一些Runnable任务。 ![EventLoopGroup介绍](https://static.oschina.net/uploads/img/201608/06184758_9ZPc.png "EventLoopGroup介绍") **功能1:先来看看注册Channel**,即将Channel注册到Selector上,由Selector来调度Channel的相关事件,如读、写、Accept等事件。 而EventLoopGroup的设计是,它包含多个EventLoop(每一个EventLoop通常内部包含一个线程),在执行上述注册过程中是需要选择其中的一个EventLoop来执行上述注册行为,这里就出现了一个选择策略的问题,该选择策略接口是EventExecutorChooser,你也可以自定义一个实现。 从上面可以看到...
乒乓狂魔 发布于 10个月前 阅读 223

PHPer 进击学习之路:各种实用的 PHP 开源库推荐(一)

PHP 是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域,是大多数后端开发者的首选。PHP 作为最受欢迎的编程语言之一,经常出现在各大语言之战中,但到底谁是最好的编程语言呢?这不是文章要讨论的内容:) 本文从众多 PHP 开源库中选出了几款实用有趣的工具,希望对你的学习工作有帮助。 1、PHP 日志工具 Monolog Monolog 是一种支持 PHP 5.3+ 以上的日志记录工具。并为 Symfony2 默认支持。 示例代码: <?php use Monolog\Logger; use Monolog\Handler\StreamHandler; // create a log channel $log = new Logger('name'); $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // add records to the log $log->addWarning('Foo'); $log->addError('Bar'); 2、Excel 操作库 PHPExcel PHPExcel 是一个用来读写 Excel 2007 (OpenXML) 文件的 PHP 库。 示例代码: include 'PHPExcel/IOFactory.php'; $inputFileName = './sampleData/example1.xls'; echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory'; $objPHPExcel = PHPExcel_IO...
编辑部的故事 发布于 2个月前 阅读 4197 评论 15 点赞 19 打赏 1

command not found: django-admin.py的解决办法(python2.7)

天升级了linux下的python,又安装了Django,按照网上的思路 在linux命令行下 1 2 3 python    #在进入python命令行之后再导入django improt django 再执行 1 django-admin.py startproject mysite 提示command not found: django-admin.py 问题应该就就是没有把django-admin.py的路径加入环境变量 只需要找到django-admin.py的路径就行。我参考了官方文档: https://code.djangoproject.com/wiki/InstallationPitfalls 但是那个文档是2年前的东西,只有2.4和2.6的,而我的python是2.7版本的。我试了下,完全不对。 不过思路是清晰了,就是加软链接的操作 linux命令也忘记的差不多了。用find /-name django-admin.py找不到,不知道是不是命令有误。。。 最后打开文件夹找,在python27/bin/里面看到了django-admin.py。 那就行了!如下图!
我的去哈哈 发布于 3年前 阅读 2987

成为Java顶尖程序员 ,看这11本书就够了

学习的最好途径就是看书 "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处: 1、能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料 2、对着书上的代码自己敲的时候方便 "看完书之后再次提升自我的最好途径是看一些相关的好博文",我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下去了。 很多程序员们往往有看书的冲动,但不知道看哪些书,下面我就给各位Java程序猿们推荐一些好书(每本书的作者会加粗标红),其中绝大多数都是我自己平时在看的书,也算是我对于平时读的书做一个小总结和读后感吧。 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客。这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1、开篇点明该设计模式的定义 2、图文并茂讲解该设计模式中的结构 3、以详细的代码形式写一下该种设...
Java程序员-10 发布于 4天前 阅读 1125 点赞 3

开源中国杭州源创会报名开始,剖析无人驾驶背后的数据库(PostgreSQL)。

趁着六月美景正好,OSC源创会带着自由、开放、分享的开源精神,也带着满满的干货主题,邀请杭州的各位来约。
源创会

如果上天再给我一次机会,我会这样学Java

回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。 [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊。 后来我就看《Thinking in Java》 ,《 Java 核心技术 》, 感觉也不吃力。 如果我之前没学过别的语言,或者半路出家转到计算机行业, 我不会先看上面那两本, 相反我会选《Head First Java》, 这本书非常适合零基础的小白, 读起来轻松搞笑, 不信你看看第一页 但是光看书也挺无趣的,不妨和视频结合着看, 我觉得传智播客的Java基础视频很不错 (唉, 给传智打了个广告), 网上一搜就有,真搜不到就来我的QQ群里吧(群号码:523047986) 注意:视频的好处就是能看到敲代码的过程, 代码是活的, 这点很爽。 如果视频只是按PPT讲编程, 果断扔掉。 书也有书的好处,能写成书的, 肯定是作者经过系统化思考,梳理才能形成的东西, 所以系统性比较强。 书还有其他优点, 例如可以随便的翻, 找到重点反复的看。 所以混合着看经典书+优秀的视频 应该是最好的入门。 Java 入门, 我不会去上培训班,白白浪费钱 ,自...
Java程序员-10 发布于 2天前 阅读 764 评论 1

假如时光倒流,我会这么学习Java

回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。 [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊。 后来我就看《Thinking in Java》 ,《 Java 核心技术 》, 感觉也不吃力。 如果我之前没学过别的语言,或者半路出家转到计算机行业, 我不会先看上面那两本, 相反我会选《Head First Java》, 这本书非常适合零基础的小白, 读起来轻松搞笑, 不信你看看第一页 但是光看书也挺无趣的,不妨和视频结合着看, 我觉得传智播客的Java基础视频很不错 (唉, 给传智打了个广告), 网上一搜就有,真搜不到就来我的QQ群里吧(群号码:523047986) 注意:视频的好处就是能看到敲代码的过程, 代码是活的, 这点很爽。 如果视频只是按PPT讲编程, 果断扔掉。 书也有书的好处,能写成书的, 肯定是作者经过系统化思考,梳理才能形成的东西, 所以系统性比较强。 书还有其他优点, 例如可以随便的翻, 找到重点反复的看。 所以混合着看经典书+优秀的视频 应该是最好的入门。 Java 入门, 我不会去上培训班,白白浪费钱 ,自...
Java程序员-10 发布于 4天前 阅读 569 点赞 3

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层反编译知识。   1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定—它会自动发生。 final方法会使编译器生成更有效的代码,这也是为什么说声明为final方法能在一定程度上提高性能(效果不明显)。 如果某个方法是静态的,它的行为就不具有多态性: class StaticSuper { public static String staticGet() { return "Base staticGet()"; } public String dynamicGet() { return "Base dynamicGet()"; } } class StaticSub extends StaticSuper { public static String staticGet() { return "Derived staticGet()"; } public String dynamicGet() { re...
Java程序员-10 发布于 3天前 阅读 670

一位资深程序员大牛给予Java初学者的学习路线建议

Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。   在大家看之前,我要先声明两点。1、由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照搬。2、下面对于【第一部分】的推荐内容,目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态,准备转行Java的同学。   如果你是在校学生,务必要在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习。第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学。   一、Java基础首先去找一个Java的基础教程学一下,这里可以推荐一个Java学习交流的QQ群(群号码:523047986)你可以到这个群里找相应的视频教程。学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下...
Java程序员-10 发布于 4天前 阅读 570 点赞 2

一个牛人给Java初学者的建议

给初学者之一:浅谈java及应用学java 不知不觉也已经10年了 从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡bbs逛论坛,没少去java相关的版面总体感觉初学者多,高手少,精通的更少由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间还有一个很重要的原因就是java这门语言更适合商业应用所以高校里大部分博士老师们对此语言的了解甚至不比本科生多在这种环境下,很多人对java感到茫然,不知所措,不懂java能做什么即便知道了java很有用,也不清楚该从哪里入手所以就有了 java入门难 这一说法ok,那我们就从java到底能做什么聊起 先说什么是java java是一种面向对象语言,真正的面向对象,任何函数和变量都以类(class)封装起来 至于什么是对象什么是类,我就不废话了 关于这两个概念的解释任何一本面向对象语言的教材里面都有 知道了什么是java,那自然就会对java能干什么感兴趣 在说java能做什么之前,先说java作为一个真正面向对象语言的优点 首先第一个,既然是真正的面向对象,那就要做到彻底的封装 这是java和c++最大的不同,java所有的源码以及编译后的文件都以类的形式存在 java没有所谓的类外部定...
Java程序员-10 发布于 6天前 阅读 461 点赞 1

写给自己的Java程序员学习路线图

如下是我做开发这几年经常使用一些技术和工具,当然这些技术也都是需要加强的(有些是我一直使用的,不过不深入,有些内部的原理等等不是很清楚) 前端部分:        1)HTML:网页的核心语言,构成网页的基础        2)CSS:使网页更加丰富多彩灿烂的利器        3)JavaScript:使网页动起来的根本,加强了网页和用户之间的交互        4)HTML DOM:换一种更加形象化的角度来看待网页,让我们更加方便的控制网页        5)HTML BOM:与浏览器交互不可或缺的工具        6)JavaScript库,主要是:jQuery及其插件、YUI及其插件,使编写网页更加的方便快捷和健壮的强大工具        7)AJAX:异步提交,增强了用户使用网页的良好交互体验        8)JSON: 比 XML 更小、更快,更易解析的数据传输工具        9)FLEX:提供丰富多彩的动画效果        10)普元工作流:更加清晰明了的帮助用户处理业务流程上面的工作        11)JSP:Servlet的展示层,使网页逻辑与网页设计的显示分离        12)JSTL:加强和简化了JSP页面的开发        13)EL:使JSP页面写起来更加简单 后台部分: ...
Java程序员-10 发布于 6天前 阅读 435

Java学习路线图

JAVA学习路线图,特此声明; 仅希望对热爱JAVA学习有所帮助 如若转载或者使用本图,请注明出处,避免后期出现版权问题,谢谢!!!   JAVA学习路线图 此乃是java攻城狮的学习路线图,由简到繁,由易到难,一步步的学习,最后成为 JAVA攻城狮。希望对大家的学习有所帮助 阶段1   1:学习HTML     2:学习CSS    3:Javascript    4:jquery    5:xml解析   6:Bootstrap      阶段2   7:JAVAse基础      8:mysql数据库     9:Powerdesigner   10:JDBC    11:JAVAWEB        阶段三 12:oracle         13:struts2         14:Hibernate       15:Spring 阶段四 16:Maven         17:SpringMVC      18:MyBatis Java学习交流QQ群:523047986  禁止闲聊,非喜勿进!
Java程序员-10 发布于 3天前 阅读 393 点赞 1

Java程序员的日常——经验贴(纯干货)

工作当中遇到的事情比较杂,因此涉及的知识点也很多。这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar -z命令,因此如果你想要压缩或者解压tar.gz的文件,就需要使用gzip或者gunzip以及tar命令了。 关于tar.gz可以这么理解,tar结尾的压缩包,其实只负责把文件打包,并没有进行压缩;而gz结尾的包,则是进行压缩操作。 因此,tar.gz的文件可以理解为,先进行打包,再进行压缩。 那么,压缩的命令就可以这样写: tar -cvf abc.tar abc gzip -c abc.tar > abc.tar.gz 最终就会得出一个abc.tar.gz的文件。同理如果想要进行解压,可以这样: gunzip abc.tar.gz =>该命令会首先得出一个abc.tar的文件 tar -xvf abc.tar =>该命令完成解压的步骤 执行完这两个命令,当前文件夹就会出现一个abc的文件夹了。 如果你的系统支持tar -z命令 如果你的系统级别高一点,就不用这么费事了,tar命令直接可以对gz进行操作: tar -zxvf 压缩文件名.tar.gz =>这个命令可以直接完成对压缩文件的解压 tar -zcvf 压缩文件名.tar.gz 被压缩文件名 =>这个命令可以直接完成对tar.gz的压缩 文件句柄占用导致...
Java程序员-10 发布于 1周前 阅读 1451

Java程序员成长的几大成长法则

摘要: 没有java人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考! Java就是用来做项目的!Java的主要应用领域就 没有java人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考! Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1、掌握项目开发的基本步骤 2、具备极强的面向对象的分析与设计技巧 3、掌握用例驱动、以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法!如果你...
Java程序员-10 发布于 7天前 阅读 334

我的web前端面试经历————百度

写在前面的话 博主就读于电子科技大学,大三狗一枚! 面试是个漫长的过程,从海投到收获电话面试,一面、二面、三面,一个步骤出错那么后面就宣告终结。同时,面试过程中你也可能会遇到一些面试官的刁难,甚至部分面试官会说些比较打击你的话,但是大部分面试官都是很棒的! 面试前的准备 基础知识 必须有牢固的基础知识,足够丰富的项目经历(就我而言差不多是三个完整项目经历,时间累计差不多接近一年)。 至少这上面的面试题你能全答出来,说得足够清楚! web前端面试宝典1 web前端面试宝典2 表述能力 表述能力,你要能把你的答案给面试官描述清楚,注意专业词汇,这将大大提高面试官对你的印象分! 简历 简历尽量一页,不要超过两页。简历内容要直奔主题,姓名、电话、邮箱、学校、项目经历!兴趣爱好之类的大部分面试官会视为垃圾信息直接过滤掉,如果你Github有什么star很多的项目千万记得贴上,这点加分非常高!如果你有自己的博客,博客上有一些含金量较高的文章的话也记得贴上自己的博客。当然最重要的一块肯定是你掌握了哪些技术,但是千万不要用网上现在比较火的进度条去表示你对技术的掌握情况,这是非常愚蠢的行为,到底什么算掌握、熟悉、精通? 简历内容,总...
前端攻城狮-Dawn 发布于 3天前 阅读 501

几个Java编程的典型例子

1.模拟酒店房间管理系统,需要如下几个功能:                      1、1 in 房间号 客人名字 入住功能                      1、2 out 房间号 退房功能                      1、3 search 房间号 查询房间状态 如果房间号为-1 则输出所有房间状态                      1、4 quit 或 exit 退出               提示:酒店所有的房间用二维数组来实现 代码实现如下: 1 import java.util.Scanner; 2 3 public class HotelDemo { 4 //写在类里面,则每个方法都可以访问到,避免了参数传递的繁琐; 5 static int h=5,w=10; 6 static String[][] rooms=new String[5][10]; 7 public static void main(String[] args) { 8 @SuppressWarnings("resource") 9 Scanner s=new Scanner(System.in); 10 while(true){ 11 System.out.println("请输入 in,out,search,quit:"); 12 String temp=s.next(); 13 int room=0; 14 if("in".equals(temp)){//防止出现空指针异常; 15 ...
Java程序员-10 发布于 2天前 阅读 454

假如时光倒流,我会这么学习Java

回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。 [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊。 后来我就看《Thinking in Java》 ,《 Java 核心技术 》, 感觉也不吃力。 如果我之前没学过别的语言,或者半路出家转到计算机行业, 我不会先看上面那两本, 相反我会选《Head First Java》, 这本书非常适合零基础的小白, 读起来轻松搞笑, 不信你看看第一页 但是光看书也挺无趣的,不妨和视频结合着看, 我觉得传智播客的Java基础视频很不错 (唉, 给传智打了个广告), 网上一搜就有,真搜不到就来我的QQ群里吧(群号码:523047986) 注意:视频的好处就是能看到敲代码的过程, 代码是活的, 这点很爽。 如果视频只是按PPT讲编程, 果断扔掉。 书也有书的好处,能写成书的, 肯定是作者经过系统化思考,梳理才能形成的东西, 所以系统性比较强。 书还有其他优点, 例如可以随便的翻, 找到重点反复的看。 所以混合着看经典书+优秀的视频 应该是最好的入门。 Java 入门, 我不会去上培训班,白白浪费钱 ,自...
Java程序员-10 发布于 7天前 阅读 341 点赞 1

Java学习之路:不走弯路,就是捷径

1.如何学习程序设计? Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。 1.1 培养兴趣 兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个"食利阶层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。 1.2 慎选程序设计语言 男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。 如果你对硬件比较感兴...
Java程序员-10 发布于 6天前 阅读 358 点赞 1

Java Web架构知识整理——记一次阿里面试经历

  “你学习一门技术的最佳时机是三年前,其次是现在。”这话从来很灵验。经过这次面试,觉得需要整理下Java Web相关的资料,以便自己提高或者更快适应可能面临的新的工作。   首先谈谈Java Web需要掌握哪些东西。这里是一些知识点的搜集,暂不做详细说明,欢迎各位博友补充指正。 1.底层 Java语言相关的就不说了,首先是JVM的结构和工作原理。比较重要的是Java内存模型,各种GC算法,Classloader的加载原理等。个人对底层的一些东西还算比较了解,所以不过多纠结,实际上程序编译链接过程以及二进制文件的处理还是很值得研究的。 JVM监控及调优。作为一个开发人员并不一定需要非常熟悉JVM调优的方法,但如果具备JVM监控及调优的能力,将让你对程序运行状况了如指掌,对于问题定位也会敏感得多。 Java多线程。对于线程安全的理解,以及如何在自己的程序中避免多线程造成的不一致问题等。 I/O。Java中常常提到的是BIO/NIO,即阻塞型I/O与非阻塞型I/O,其实并不难理解,结合Linux中的同步I/O和异步I/O的实现原理,基本都是相通的,每种I/O方式解决的问题,又存在什么问题,为什么使用epoll。 2.Servlet   Servlet是运行于服务端的java程序,一般实现自己的Java服务端应用...
Java程序员-10 发布于 6天前 阅读 580

成为一名Java高级工程师你需要学什么

宏观上: 1.技术广度方面 至少要精通多门开源技术吧,研究过struts\spring等的源码。 2.项目经验方面 从头到尾跟过几个大项目,头是指需求阶段,包括需求调研。 尾是指上线交付之后,包括维护阶段。 3.架构经验方面 有过分布式系统的架构和开发经验。对于跨系统的结构优化,数据存储的性能指标等有丰富经验。什么缓存啊、数据库的垂直切分什么的,业务的抽象和水平拆分啊,这些应该都轻车熟路吧。 4.行业领域方面 最起码得精通一到两门业务吧,所谓精通,就是比如做金融证券业务的,至少等当半个经融分析师。做电力业务的,至少等当半个电力工程师。 5.个人修为 有自己一些独到的见解,不会人云亦云啦。 微观上: 1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及statediagrams。 2.你需要学习JAVA语言的基础知识以及它的核心类库(collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。 3.你应该了解JVM,classloaders,classreflect,以及垃圾回收的基本工作机制等。你应该有能力反编译一个类文件并且...
Java程序员-10 发布于 10小时前 阅读 256

Java学习路线图

JAVA学习路线图,特此声明; 仅希望对热爱JAVA学习有所帮助 如若转载或者使用本图,请注明出处,避免后期出现版权问题,谢谢!!!   JAVA学习路线图 此乃是java攻城狮的学习路线图,由简到繁,由易到难,一步步的学习,最后成为 JAVA攻城狮。希望对大家的学习有所帮助 阶段1   1:学习HTML     2:学习CSS    3:Javascript    4:jquery    5:xml解析   6:Bootstrap      阶段2   7:JAVAse基础      8:mysql数据库     9:Powerdesigner   10:JDBC    11:JAVAWEB        阶段三 12:oracle         13:struts2         14:Hibernate       15:Spring 阶段四 16:Maven         17:SpringMVC      18:MyBatis Java学习交流QQ群:523047986  禁止闲聊,非喜勿进!
Java程序员-10 发布于 1周前 阅读 1394 点赞 3

Java基础知识总结

本博文内容参考相关博客以及《Java编程思想》整理而成,如有侵权,请联系博主。 PDF版下载链接:《Java基础知识总结》。 如果您想在此基础上做一些修改,请联系dingyu.sdu@gmail.com,我把word原版发给您。   一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk      path=%JAVA_HOME%\bin     2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1):永久配置方式:classpath=.;c:\;e:\     2):临时配置方式:set classpath=.;c:\;e:\   注意:在定义classpath环境变量时,需要注意的情况 如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找...
Java程序员-10 发布于 7天前 阅读 290 点赞 1

Java Web架构知识整理——记一次阿里面试经历

  “你学习一门技术的最佳时机是三年前,其次是现在。”这话从来很灵验。经过这次面试,觉得需要整理下Java Web相关的资料,以便自己提高或者更快适应可能面临的新的工作。   首先谈谈Java Web需要掌握哪些东西。这里是一些知识点的搜集,暂不做详细说明,欢迎各位博友补充指正。 1.底层 Java语言相关的就不说了,首先是JVM的结构和工作原理。比较重要的是Java内存模型,各种GC算法,Classloader的加载原理等。个人对底层的一些东西还算比较了解,所以不过多纠结,实际上程序编译链接过程以及二进制文件的处理还是很值得研究的。 JVM监控及调优。作为一个开发人员并不一定需要非常熟悉JVM调优的方法,但如果具备JVM监控及调优的能力,将让你对程序运行状况了如指掌,对于问题定位也会敏感得多。 Java多线程。对于线程安全的理解,以及如何在自己的程序中避免多线程造成的不一致问题等。 I/O。Java中常常提到的是BIO/NIO,即阻塞型I/O与非阻塞型I/O,其实并不难理解,结合Linux中的同步I/O和异步I/O的实现原理,基本都是相通的,每种I/O方式解决的问题,又存在什么问题,为什么使用epoll。 2.Servlet   Servlet是运行于服务端的java程序,一般实现自己的Java服务端应用...
Java程序员-10 发布于 5天前 阅读 1507

Java程序员开发参考资源

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配置,所以维护起来相当困难。 Gradle:Gradle采用增量构建。Gradle通过Groovy编程而不是传统的XML声明进行配置。Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民。 字节码操作 编程操作Java字节码的函数库。 ASM:通用底层字节码操作及分析。 Javassist:尝试简化字节码编辑。 Byte Buddy:使用“流式API”进一步简化字节码生成。 代码分析 软件度量和质量评估工具。 Checkstyle:对编程规范和标准进行静态分析。 FindBugs:通过字节码静态分析找出潜在Bug。 PMD:对源代码中不良编程习惯进行分析。 SonarQube:通过插件集成其它分析组件,提供评估最终结果报告。 编译器 创建分析器、解释器和编译器的框架。 ANTLR:功能完备的自顶向下分析复杂框架。 JavaCC:相对ANTLR更具体,上手略为简单。支持语法语法超前预测(syntactic lookahead)。 持续集成 支持持续集成、测试和应用发布的工具。 Bamboo:Atlassian的持续集成(CI)解决方案,包含很多其它产品。 Ci...
Java程序员-10 发布于 7天前 阅读 272

《Inside C#》笔记(八) 接口

接口可以认为是属于不同继承树的代码之间的行为约定。C#的接口相当于是一种特殊的抽象类,这种抽象类的内部只有虚方法。   一 接口的使用 a) 接口内部可以包含方法、属性、索引器和事件,这些成员都不在接口中实现。接口内部的成员默认都是公开的,而且如果用public修饰还会报编译错误。 b) C#不支持多继承,但可以实现多个接口。 c) 有时会遇到这样的需求:要继承某个接口,但又不想公开接口相关的方法。这时可以使用Name Hiding特性。比如有IDataBound接口   对接口方法的实现除了一般的public void Bind()形式外,还可以这样     把public修饰符去掉,然后写成void IDataBound.Bind()   二 重名问题 C#不支持多继承的原因之一是为了避免重名问题。但因为接口的存在,仍然会有重名的情况出现。比如ISerializable和IDataStore都约定了SaveData方法。   如果一个类同时实现了这两个接口,要如何区分两个Save方法呢,做法与之前的Name Hiding类似 可以在方法前面加上接口类型   三 继承与接口带来的问题 a) 基类的方法与接口的方法同名     本来EditBox类要继承IDataBound接口就必须实现Serialize方法,但这种情况不去实现竟然也能编译通过。因为基类的Serialize方...
zhixin9001 发布于 2小时前 阅读 1

开源中国杭州源创会报名开始,剖析无人驾驶背后的数据库(PostgreSQL)。

趁着六月美景正好,OSC源创会带着自由、开放、分享的开源精神,也带着满满的干货主题,邀请杭州的各位来约。
源创会

springboot 集成active MQ

springboot 集成active MQ。active MQ对对象类型消息使用繁琐,在发射消息时用jackson将java对象类型转换成字符&...
jingshishengxu 发布于 3小时前 阅读 4

类加载器与类全名才能确立其在JVM中的唯一性

类加载器与类全名才能确立其在JVM中的唯一性
cloud-coder 发布于 4小时前 阅读 2

单例这种设计模式

随着我们编写代码的深入,我们或多或少都会接触到设计模式,其中单例(Singleton)模式应该是我们耳熟能详的一种模式。本文将比较特别的介绍一下Java设计模式中的单例模式。 概念 单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点。 实现思路 在单例的类中设置一个private静态变量sInstance,sInstance类型为当前类,用来持有单例唯一的实例。 将(无参数)构造器设置为private,避免外部使用new构造多个实例。 提供一个public的静态方法,如getInstance,用来返回该类的唯一实例sInstance。 其中上面的单例的实例可以有以下几种创建形式,每一种实现都需要保证实例的唯一性。 饿汉式 饿汉式指的是单例的实例在类装载时进行创建。如果单例类的构造方法中没有包含过多的操作处理,饿汉式其实是可以接受的。 饿汉式的常见代码如下,当SingleInstance类加载时会执行private static SingleInstance sInstance = new SingleInstance();初始化了唯一的实例,然后getInstance()直接返回sInstance即可。 1 2 3 4 5 6 7 8 9 10 public class SingleInstance { private static SingleInstance sInstance = new SingleInstance(); private ...
心梦无双 发布于 5小时前 阅读 3

node 服务端什么情况下自动反序列化 Json数据?

前端传递 javascript对象 前端传递 json 字符串 是这样子的: 如果你传递的是 js对象,那么浏览器端会序列化为字符串发送,服务端 node会自动反序列化成 js对象。 如果你传递的是 json字符串,那么浏览器端直接以字符串发送,服务端 node不会自动序列化为 js对象。
中柠檬 发布于 5小时前 阅读 2

第一个 Hadoop MapReduce

看了几天Hadoop了,来模仿写一个MR,模拟wordcount,统计文件中每个单词出现的次数 编写MR 先写mapper程序: package com.isqlplus.hadoop; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); String[] words = StringUtils.split(line, " "); for (String word : words) { context.write(new Text(word), new LongWritable(1)); } } } 再写reducer package com.isqlplus.hadoop; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class WCRedu extends Reducer<Text, LongWritable, Text, LongWritable> { @Override protected v...
xxj123gogo 发布于 5小时前 阅读 7

Django的objects查询数据实现group_by功能,绕开自己挖的坑

由于自学Django时看文档不够仔细,实际操作起来就遇到了不少坑,本文就是其中之一
Jamie-Liu 发布于 9小时前 阅读 5

jvm页面展示(获取jvm和计算机信息)

Runtime 类: 每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。应用程序不能创建自己的 Runtime 类实例,可以通过getRuntime()方法获取当前运行时。  Properties 类: Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。list(PrintStream out)或者list(PrintWriter out)方法将属性列表输出到指定的输出流。 System 类: System 类包含一些有用的类字段和方法。它不能被实例化。在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。getProperties()方法确定当前的系统属性。 import java.util.Properties;//导入Properties类 public class SystemInfo{ public static void main(String args[]){ Properties p=System.getProperties();//获取当前的系统属性 p.list(System.out);//将属性列表输出 System.out.print("CPU个数:");//Runtime.getRuntime()获取当前运行时的实例 System.out.println(Runtime.getRuntime().availableProcessors());//available...
sprouting 发布于 9小时前 阅读 4

JDK源码解析之LinkedList

一、 LinkedList简介         LinkedList 跟 ArrayList一样实现了List接口,但跟ArrayList不同的是ArrayList采用的是数组作为存储元素的容器,所以ArrayList可以直接用角标获取元素,所以ArrayList查询效率较高, 但在添加和删除元素的速度比较慢,因为得移动元素。而LinkedList采用的是链表来存储元素, 因为它没有下标,所以在查询某个元素时的速度较慢,需要遍历链表,但在添加和删除元素时不用移动其他元素,所以增删速度快。   二、 LinkedList的数据结构      1. LinkedList结构图                  Linked中的每个节点都包含了上一个元素和下一个元素,如果该节点为头节点的话,该节点就只有下一个元素,如果该节点是尾节点的话,name该节点只有上一个元素      2. LinkedList增删图                  有A、B、C三个节点如上,A的next是B,B的next是C,如果要将B节点删除,只要将A节点的next节点指向C,将C节点的prev指向A即可                有A、B 两个节点,A的next是B,如果要在A、B之间插入节点C,则需将A的next指向C,C的prev指向A,C的next指向B,B的prev指向C  三、LinkedList源码解析 packag...
追梦人_ 发布于 10小时前 阅读 5

Java就业指导

 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写到你的简历中,当然更需要的是你在面试的时候向面试官展示这些专业技能。相信此文对正在寻觅Java程序员(Java工程师)职位的freshman以及希望成为中高级Java开发者的junior都会有所帮助。 专业技能 熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。 对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用Spring MVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。 熟练的使用Hibernate...
Java程序员-10 发布于 10小时前 阅读 6

Spring3整合定时器之Quartz

说到定时器,一定会想到Timer,但是他只能简单的进行时间单位类似倒计时的功能实现,如果要精确每年每月的日期甚至星期几,那么换算起来就比较麻烦,这里可以用Spring与Quartz整合来完成定时器的实现。 虽然Quartz已经发布了2.X版本,但是Spring3目前只能整合Quartz1.8.5及以下版本。 注意Spring整合Quartz项目必须的JAR包:其中slf4j-api-1.6.4.jar是必须的,因为Quartz1.8.5依赖此日志接口,这里我选用Log4j的日志实现。 <beans ....> <!--要调度的对象 --> <bean id="sendJob" class="com.chou.quartz.SendJob"> <property name="message" value="20秒过去了,发送短信ing..." /> </bean> <!--要调度的对象 --> <bean id="receiveJob" class="com.chou.quartz.ReceiveJob"> <property name="message" value="30秒过去了,接收短信ing..." /> </bean> <!-- ======================== 调度触发器 这里定义了2个用来执行不同的任务,如果是单个就不需要这么多 ======================== --> <bean id="sendJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--要执行的bean--> <proper...
sprouting 发布于 10小时前 阅读 2

成为一名Java高级工程师你需要学什么

宏观上: 1.技术广度方面 至少要精通多门开源技术吧,研究过struts\spring等的源码。 2.项目经验方面 从头到尾跟过几个大项目,头是指需求阶段,包括需求调研。 尾是指上线交付之后,包括维护阶段。 3.架构经验方面 有过分布式系统的架构和开发经验。对于跨系统的结构优化,数据存储的性能指标等有丰富经验。什么缓存啊、数据库的垂直切分什么的,业务的抽象和水平拆分啊,这些应该都轻车熟路吧。 4.行业领域方面 最起码得精通一到两门业务吧,所谓精通,就是比如做金融证券业务的,至少等当半个经融分析师。做电力业务的,至少等当半个电力工程师。 5.个人修为 有自己一些独到的见解,不会人云亦云啦。 微观上: 1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及statediagrams。 2.你需要学习JAVA语言的基础知识以及它的核心类库(collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。 3.你应该了解JVM,classloaders,classreflect,以及垃圾回收的基本工作机制等。你应该有能力反编译一个类文件并且...
Java程序员-10 发布于 10小时前 阅读 256

PAT B1061. 判断题(15)

#include <iostream> #include <cstdio> #define LOCAL using namespace std; #define MAX 11111 int main(int argc, char *argv[]) { #ifdef LOCAL     freopen("input.txt","rb",stdin);     freopen("output.txt","wb",stdout); #endif     int n,m;     scanf("%d %d",&n,&m);     int score[MAX],ans[MAX];      for(int i=0;i<m;i++)         scanf("%d",score+i);     for(int i=0;i<m;i++)         scanf("%d",ans+i);          for(int i=0;i<n;i++){         int sum=0,t;         for(int j=0;j<m;j++){             scanf("%d",&t);             if(t==ans[j])                 sum+=score[j];         }         printf("%d\n",sum);     }      return 0; }  ...
阿豪boy 发布于 11小时前 阅读 3

Java使用内存映射实现大文件的上传

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。 package test; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class Test { public static void main(String[] args) { try { FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt"); int sum=0; int n; long t1=System.currentTimeMillis(); try { while((n=fis.read())>=0){ sum+=n; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } long t=System.cu...
心梦无双 发布于 11小时前 阅读 6

python使用smtplib模块来发送邮件

Python 邮件 smtplib
mgic 发布于 12小时前 阅读 2

用R语言导入Excel xlsx及xls格式的数据

一、安装R语言 添加apt-key sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 sudo apt-get update sudo apt-get install r-base-core r-base-dev 二、安装xls模块 sudo chmod -Rf a+rw /usr/local/lib/R/site-library sudo mkdir /usr/lib/jvm sudo ln -s /opt/lib/jvm/jdk1.8.0_131 /usr/lib/jvm/default-java 安装 $ R R version 3.4.0 (2017-04-21) -- "You Stupid Darkness" Copyright (C) 2017 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R是自由软件,不带任何担保。 在某些条件下你可以将其自由散布。 用'license()'或'licence()'来看散布的详细条件。 R是个合作计划,有许多人为之做出了贡献. 用'contributors()'来看合作者的详细情况 用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。 用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或 用'help.start()'通过HTML浏览器来看帮助文件。 用'q()'退出R. > install.packages("xlsx")   三、测试代码 $ cat testxls.R # My first program in R Programming library(xlsx) Mydata<-read.xlsx2(file="./111...
wangxuwei 发布于 12小时前 阅读 2

Java Map遍历方式方式及性能测试

1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value、遍历key、遍历value等不同场景下的差异,我试着进行了一些对比测试。 2. 对比测试 一开始只进行了简单的测试,但结果却表明keySet的性能更好,这一点让我很是费解,不都说entrySet明显好于keySet吗?为了进一步地进行验证,于是采用了不同的测试数据进行更详细的对比测试。 2.1 测试数据 2.1.1 HashMap测试数据 HashMap-1,大小为100万,key和value均为String,key的值为1、2、3……1000000: Map<String, String> map = new HashMap<String, String>();   String key, value;   for (i = 1; i <= num; i++) {       key = "" + i;       value = "value";       map.put(key, value);   } HashMap-2,大小为100万,key和value均为String,key的值为50、100、150、200、……、50000000: Map<String, String> m...
心梦无双 发布于 13小时前 阅读 4

Java编程中关于异常处理的10个最佳实践

在实践中,异常处理不单单是知道语法这么简单。编写健壮的代码是更像是一门艺术,在本文中,将讨论Java异常处理最佳实践。这些Java最佳实践遵循标准的JDK库,和几个处理错误和异常的开源代码。这还是一个提供给java程序员编写健壮代码的便利手册。Java 编程中异常处理的最佳实践 这里是我收集的10个Java编程中进行异常处理的10最佳实践。在Java编程中对于检查异常有褒有贬,强制处理异常是一门语言的功能。在本文中,我们将尽量减少使用检查型异常,同时学会在Java编程中使用检查型VS非检查型异常。 1)为可恢复的错误使用检查型异常,为编程错误使用非检查型错误。 选择检查型还是非检查型异常,对于Java编程人员来说,总是让人感到困惑。检查型异常保证你对错误条件提供异常处理代码,这是一种从语言到强制你编写健壮的代码的一种方式,但同时会引入大量杂乱的代码并导致其不可读。当然,如果你有替代品和恢复策略的话,捕捉异常并做些什么看起来似乎也在理。在Java 编程中选择检查型异常还是运行时异常,更多信息参考checked vs unchecked exceptions。 2)在finally程序块中关闭或者释放资源 这在Java编程中,是一个广为人知的最佳实践,在处理网络和IO类的时候,相当于...
心梦无双 发布于 15小时前 阅读 4

Java编程初学者应该了解的编程框架

很多的Java初学者从前辈的口中和各种资料中经常会听到一个词:Java框架,那么什么是“Java框架”?Java框架又包含哪些内容?今天小编为大家解答一下什么是Java的框架,主流的Java框架有哪些。 什么是Java框架 所谓的Java框架,简单理解是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。 常用的Java框架有哪些 Struts、Hibernate和Spring是我们Java开发中的常用框架,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。 为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一...
Java程序员-10 发布于 16小时前 阅读 196

第15章 位操作 15.4 位字段

对位进行操作的第二种方法是使用位字段(bit field),位字段是一个signed int 或unsigned int中一组相邻的位。 位字段由一个结构声明建立,该结构声明为每一个字段提供标签,并决定字段的宽度。例如,以下声明建立了4个1位字段: struct { unsigned int autfd:1; unsigned int bldfc:1; unsigned int undln:1; unsigned int itals:1; }prnt; 该定义使prnt包含4个1位字段。现在,您可以使用普通的结构成员运算符将值赋给单独的字段: prnt.itals = 0; prnt.undln = 1; 因为每个字段都正好为1位,所以1和0是惟一可以用于赋值的值。变量prnt被存储在一个int大小的存储单元中,但是在本例中仅有其中的4位被使用。 带有位字段的结构提供一种保存设置的方便的方法。许多设置,如字体 的粗体 或斜体,是简单的二选一问题,例如打开或关闭,是或否,真或假。在您只需要单个位时,不需要使用整个变量。带有位字段的结构允许您在单个单元中存储多项设置。 有时,对于某个设置有两个以上的选择,因此你需要用多位来表示所有的选择。因为字段不限于1位大小,所以这不是问题,您可以使用如下的代码: struct { unsigned int code1:2; unsigned int code2:2; ...
idreamo 发布于 19小时前 阅读 3

java lambda方法引用总结——烧脑吃透

lambda是java8的新特性,基本使用比较容易理解,但有一个环节遇到了坎儿,那就是方法引用,尤其是类的实例方法引用,烧脑之后总结一下。 在需要函数参数的方法中,我们可以把另一个同类型的方法直接传入,这称为方法引用的绑定。类似于C语言中的函数指针。 lambda表达式可以替代方法引用;或者说方法引用是lambda的一种特例,方法引用不可以控制传递参数。 ### 4.1) 构造器引用 ```java private Person construntorRef(Supplier sup){ Person p=sup.get(); return p; } @Test public void testConstructorRef(){ Person p=construntorRef(Person::new); System.out.println(p); } ``` 需要有无参的构造器。 ### 4.2) 静态方法引用 ```java private static void print(String s){ System.out.println(s); } @Test public void testStaticRef(){ Arrays.asList("aa","bb","cc").forEach(TestMethodReference::print); } ``` so easy,只要静态方法的参数列表和FI需要的参数一致就可以。 ### 4.3) 成员方法引用 ```java @Test public void testMemberMethodRef(){ Arrays.asList("aa","bb","cc").forEach(System.out::println); } ``` so easy,只要成员方法的参数列表和FI需...
polly 发布于 2周前 阅读 3426 评论 18 点赞 7

现代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...
黑客画家 发布于 2个月前 阅读 2532 评论 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 发布于 2个月前 阅读 4738 评论 8 点赞 16

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 发布于 3个月前 阅读 4306 评论 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 发布于 3个月前 阅读 2542 评论 11 点赞 1

Python进阶篇二:Python模块

Python的强大之处有许多,其中重要的一点就是Python包含许多的第三方库。因此,懂得如何制作、导入自制模块或第三方模块就显得非常重要。此外,熟悉python模块的查看方式有利于编程者缩短python语言的学习使用时间。本文从python模块的制作、导入、查看和使用入手,重点介绍在WINDOWS环境下如何处理和使用python模块。最后一部分介绍一些python常用的模块供读者参考。
SamYjy 发布于 3个月前 阅读 2211 点赞 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...
小徐同学 发布于 3个月前 阅读 6007 评论 26 点赞 26 打赏 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...
悠悠然然 发布于 3个月前 阅读 4865 评论 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 发布于 4个月前 阅读 2468 评论 18 点赞 13

聊聊Java的泛型及实现

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

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

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

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

匈牙利算法,KM算法详解及java实现;2016华为软件精英挑战赛,思路总结之KM算法求解指派问题;
husthang 发布于 4个月前 阅读 2068 评论 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 发布于 5个月前 阅读 1675 评论 2

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

踩过很多次GC的坑,基本每次性能问题,除了数据库,其它高发地区就是GC问题了
爱吃大肉包 发布于 5个月前 阅读 5392 评论 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类型则,则按照链表的形式进行插入操作 链表插入操作完成后,判断是否超过阈值...
乒乓狂魔 发布于 6个月前 阅读 6333 评论 25 点赞 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 矩阵...
灯下黑鬼吹灯 发布于 7个月前 阅读 2569 评论 17 点赞 4

秒杀 tj/co 的 hprose 协程库

ES6 中引入了 Generator,Generator 通过封装之后,可以作为协程来进行使用。 其中对 Generator 封装最为著名的当属 tj/co,但是 tj/co 跟 ES2016 的 async/await 相比的话,还存在一些比较严重的缺陷。 hprose 中也引入了对 Generator 封装的协程支持,但是比 tj/co 更加完善,下面我们就来详细介绍一下它们之间的差别。
andot 发布于 7个月前 阅读 2430 评论 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初期使用比较麻烦,需要各种配置文件、实...
纯洁的微笑 发布于 8个月前 阅读 5597 评论 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...
李岩飞 发布于 8个月前 阅读 5415 评论 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) {...
李岩飞 发布于 8个月前 阅读 4853 评论 27 点赞 10
顶部