`
duanhengbin
  • 浏览: 383339 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表

[置顶] Scala备忘录

本篇特用来对Scala的日常惯用法做一些记录,尽量简洁不废话。第三方包除外,只收录标准库。   集合类(Seq) 集合类(Map) 正则 JSON解析 XML解析 语法糖 杂项 集合类(Seq) - 构建 val truth = "fly" :: "is" :: "fun" :: Nil //List(fly,is,fun) val list1 = List(1,2) val list2 = List.fill(3)("one") //List[String] =L ...
【项目简述】 抓取某学院视频网站的系列课程,相比于上一篇,这一次多了不少实用性。   【前提】 必须要有该网站的VIP账户,主要是Cookies要使用,否则无法获取一部分受限视频。当然有不少免费获取VIP账户的方法可以自行搜索。   【视频网站的特点】 1)这类网站一般都有不同程度的反扒措施,某学院采用的是动态缓存,即是有权限的会员打开网页才能获取该视频的Url,这个Url有一定时效性,不适合大量抓取Url后再下载(等全抓完前面的已失效了)。但是边抓取Url边下载是没有问题的,这是较容易爬取的一类。网页的分析和以前并无分别,用F12搞定。 2)由于目标文件数量多,文件的组织比 ...
分享一下前段学习Scala做的一个爬虫程序。   【关于爬虫】 接触爬虫的时间并不长,发现python在这个领域有很大的份额。虽然也用过python,但是始终觉得动态语言做这种“严谨“工作还是不如Java,当然更没法和Scala比。 总结一下爬虫的主要困难: 痛点1:网断,大量爬取时,各种超时错是司空见惯,需要有良好的重试机制防止被打断。 痛点2:验证码,一般大网站都有反爬机制,当一定时间访问过多,就会跳转到验证码页面(携程就有)甚至禁止访问。另外,做模拟登陆的时候这个更是是绕不开的坎,真正的爬虫噩梦。详见: 知乎上一篇《为什么有些验证码看起来很容易但是没人做自动识别的?》  黄 ...
Mybatis 的物理分页是应用中的一个难点,特别是配合检索和排序功能叠加时更是如此。 我在最近的项目中开发了这个通用分页器,过程中参考了站内不少好文章,新年第一天,特此发文回馈网站。 特别鸣谢 paginator项目 (https://github.com/miemiedev/mybatis-paginator ) ,阅读源码帮助很大。   【背景】 项目框架是 SpringMVC+Mybatis, 需求是想采用自定义的分页标签,同时,要尽量少的影响业务程序开发的。如果你已经使用了JS框架( 如:Ext,EasyUi等)自带的分页机能,是属于前端分页,不在本文讨论范围。   ...
本来调研Akka这个并发框架,不知不觉迷上了Scala编程已有一段时间。期间拜读Scala各种书籍,发现在国内实在太小众,Scala融合了面向对象及函数式的特点,有着强大的类型系统。外在来看Scala代码非常简洁并且有不输于动态语言的强大表现力,本文下面通过一个例子谈一谈。要实现这么一个小功能:    将任意int型转换为如下LED形式的字符串(三行) ' _ _ _ _ _ _ _ _ ' |_||_| ||_ |_ |_| _| _| || | ' _||_| ||_| _| | _||_ ||_|  先 ...
一年多未更新博客了,此贴纯刷屏用。前段做培训留的题目,自己作了下,感觉蛮简单的代码测的时候还是有不少坑,只做了整数版本,懒得再弄了。 import java.util.ArrayList; import java.util.Stack; /** * 逆波兰表达式实现四则运算 * * @author Duanhengbin * */ public class Exercise02 { // 四则运算式中的符号 static String OPERATORS = "+-*/()"; /** * 根据输入的中缀表达式列表 ...
首先,推荐一下站里的这篇经典文章:http://struts2.group.iteye.com/group/wiki/1463-taglib-the-eternal-debate-topic文中的许多观点到现在还是非常有参考价值。文章写于2009年,又是4年多过去,一些外部环境发生了变化。>Spring MVC超越了Struts 成为了MVC框架的首选。 >对于前端使用JSP的应用来说,JSTL+EL表达式混合使用是开发的“标准方式”。>自定义标签的应用依然非常广泛。按上文的观点,标签分为 逻辑控制类,数据输出类,页面组件类 。前两种相对简单,本文主要涉及应用中较复杂的 页面组 ...
【前言】 本文主要针对上一篇mybatis分页器实现一个不够合理的地方进行了优化。 原文链接 http://duanhengbin.iteye.com/blog/1998017 ================================================================================= 今天研究了一下@RequestMapping 的文档,spring 提供了极其丰富的入参选择,利用HttpServletRequest 实现了一个简化 分页框架的方法。   先来看一下简化结果 【改造前】 @RequestMapping ...

Guava 入门篇

Guava使用有一段时间了,总结一下。    【资源】 官网:http://code.google.com/p/guava-libraries/ >WHY Guava http://stackoverflow.com/questions/4542550/what-are-the-big-improvements-between-guava-and-apache-equivalent-libraries >如何学习 目前没有CookBook之 ...
最近做网页分析时接触了一些 包括jsoup在内开源工具。 今天有时间读了下jsoup的源码,记录一下心得。   【特色】 作为html 解析工具,jsoup 出现的时间远不如大名鼎鼎的HttpClient。但是他有一些不错的特色:   1.实现了CSS选择器语法,有了这个页面内容提取真不是一般的方便。 2.解析算法不使用递归,而是enum配合状态模式遍历数据(先预设所有语法组合),减少性能瓶颈。另外,不需要任何第三方依赖。   【示例】 比如要想要过滤一个网页上所有的jpeg图片的链接,只需要下面几句即可。 Document doc = Jsoup.connect(& ...
今天总结一下JDK中采用的排序算法,主要出现在两个类中。   java.util.Arrays   static void sort(int[] a) static void sort(int[] a, int fromIndex, int toIndex)   其他基本类型(byte,char,short,long,float,double)算法相同。float 和 double 多了两步long型本地转换的步骤,主要处理NaN值。 以上基本类型数组的排序方法的 采用了一个经过调优的快速排序法。   static <T> void sort(T[] a, ...
最近一直在搞正则相关的东西,利用空闲时间,改善了下原来项目里比较笨拙的统计代码行数程序。   思路:采用倒推计算的方法,即先删除空行,再删除注释行,每一步之前都统计下剩余的行数,最后再来算 空白行,注释行,和有效代码行。之所以这样考虑有两个原因:一是,多行注释的行数确认比较麻烦,删除后再算可以简化处理。二是JAVA的正则API缺少计数的功能,直接计数肯定要用循环,而且用很多次,比较麻烦。   ... 以上为文件读入代码(略) String separator = "\r\n"; //strFile 为将文件读入字符串 int iCntAll = countM ...
本文记录一个用正则解决问题的过程。较多的是思路的笔记。   需求:        分析项目中 PL/SQL的表使用状况。也就是哪个程序对那些表做了增删改查。      【初步分析】    乍一看视乎不难,INSERT/UPDATE/DELETE 语句表名比较好根据位置确定,SELECT查询 FROM 关键字后面的字符串并分析,但是实际上这种方法有很大问题,首先是子查询可能出现在from节中,这种情况几乎没办法用程序分析。其次,from节的结尾判定也有很多种,不易考虑周全。     最终确定一个可行的方案是将完整的SQL语句抽出,再利用sql语法树进行分析。         【用于 ...
最近进了新书《深入理解C++11》和《GO语言编程》,都是国人撰写或参与的佳作。记录一下心得。   1972年  C     由struct领衔,简单而直观的内存布局。    威力强大的指针的广泛使用,参数传递为传值。      缺点:过程式的语言,对于大型软件开发效率低(当然偏硬件的软件如linux是当仁不让的首选)    1980年  C++     完全兼容C的基础上,对象特性的导入(public,virtual,::等)         ->后果:导致C++的内存布局非常复杂    构造函数和析构函数的设计导致new和delete的出现。         ->后 ...
需求:  有一张旧的权限表,7个等级(1-7)。除1级以外,每个用户ID都有关联一个上级用户ID。 要做一张新表,把每个人对应7级的ID都抽出来。 create table new_Competence(   userid varchar(10),   parentid vachar(10),   level number(2),   avail_start varchar(8),   avail_end varchar(8),   level1 number(2),   level2 number(2), …   level7 number(2), ); 实现方案:  开始按常规考虑,一个 ...
Global site tag (gtag.js) - Google Analytics