就像开发一样, 这篇文档如果没有人关心和维护, 里面的内容就会变得老旧, 过时而不再具有参考价值. 所以, 我希望所有看到并喜欢这篇文档的人都一起来维护它. 放心大胆的提交 Pull Request 和 Issue 吧!!

广告日志与标签数据均落在Hive表,并且ES官方提供与Hive的集成。因此,我们首选用Hive向ES写数据。首先,采用ES做数据存储,创建表如下:

add jar /path/elasticsearch-hadoop-2.3.1.jar;

create external table ad_tag (
dvc string
,medias array<string>
,c1_arr array<string>
,week_time string
)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties(
'es.nodes' = '<ip>:9200'
,'es.resource' = 'ad-{week_time}/tag'
,'es.mapping.exclude' = 'week_time');

在设计Hive表结构时,ES的计算UV的distinct count(cardinality)存在着计算误差;因此,我们按dvc对其他字段做了聚合,UV的计算转换成了ES doc命中数。其中,es.nodes表示ES的节点,只需配置一个节点即可;es.resource对应于ES的Index/Type;es.mapping.exclude在写ES时不会被索引的字段。因我们只有写操作而没有通过Hive查询ES数据,因此并没有设置es.query。Hive向ES写数据如下:

1.配置

    @Bean
    public ResourceBundleMessageSource messageSource(){
        ResourceBundleMessageSource source = new ResourceBundleMessageSource();
        source.setBasenames("msg");
        source.setDefaultEncoding("UTF-8");
        source.setFallbackToSystemLocale(false);

        return source;
    }

这里没有指定localeResolver, 默认会使用AcceptHeaderLocaleResolver,也就是说从request的header中获取Accept-Language来解析语言。

ResourceBundleMessageSource是多语言翻译的逻辑处理。source.setBasenames("msg")绑定一个多语言的集合。这里我创建一个叫做msg的集合:
.

2.创建多语言方法

在main下右键创建一个文件夹i18n,然后将其设置为resources类型。在gradle中,可以在build.gradle里添加:

sourceSets {
    main {
        resources {
            srcDir 'src/main/i18n'
        }
    }
}

然后-New-Resource Bundle. 起一个集合的名字,比如msg, 添加需要的语言包。
在里面添加内容 http://www.cnblogs.com/emldc/

#msg.properties
user.name=default for en_US, I'm {0}
user.age='18'

#msg_en_US.properties
user.name=test, the user's name is {0}.

#msg_fr_FR.properties
user.name=This is french, I'm {0}

#msg_zh_CN.properties
user.name=测试 ,用户名是 '{0}'

3.编写一个controller测试

    @Autowired
    private MessageSource messageSource;
    @ResponseBody
    @RequestMapping(value = "/i18n/{name}", method = RequestMethod.GET)
    public Map resource(Locale locale,
                        @PathVariable("name") String name){
        Map map = new HashMap();

        String[] arr = {name};
        String message = messageSource.getMessage("user.name", arr, locale);
        String age = messageSource.getMessage("user.age", null, locale);
        map.put("username", message);
        map.put("age", age);

        return map;
    }
  • java中通过MessageSource来获取配置语言包中内容 http://www.cnblogs.com/ltvnrtj/
  • 进行打印

    <script language="javascript">
    function  Print(){
            $("#setFormLayout").jqprint();
        }
    </script>

    只需要指定打印内容的DIV,我上面表单是包含在ID为setFormLayout、

    属性相关

    $("#printContainer").jqprint({
         debug: false, //如果是true则可以显示iframe查看效果(iframe默认高和宽都很小,可以再源码中调大),默认是false
         importCSS: true, //true表示引进原来的页面的css,默认是true。(如果是true,先会找$("link[media=print]"),若没有会去找$("link")中的css文件)
         printContainer: true, //表示如果原来选择的对象必须被纳入打印(注意:设置为false可能会打破你的CSS规则)。
         operaSupport: true//表示如果插件也必须支持歌opera浏览器,在这种情况下,它提供了建立一个临时的打印选项卡。默认是true
    });

    从图中我们可以知道

    1、一个完整的JS事件流是从window开始,最后回到window的一个过程

    2、事件流被分为三个阶段(1~5)捕获过程、(5~6)目标过程、(6~10)冒泡过程

    3、在冒泡过程中6比7早触发,也就解释了上面那题,为什么btn1,会比content先触发

    然而在有些情况下JS的事件流不会根据上图这个从捕获过程到目标过程到冒泡过程这样去推进的,

    DOM Level 捕获事件 冒泡事件
    DOM Level 0 不支持 支持
    DOM Level 2 支持 支持
    DOM Level 3 支持 支持

    从表中我们可以知道在DOM Level 0事件的时候是不支持捕获事件的,那么什么是Level 0呢

    四、what is DOM Level

    这一章,我们就来探讨什么是DOM Level,先从DOM Level 0说起,以上面的例子为例,JS部分可以这样改写为:

  • params:字符串或者对象,将使用paramserializer序列化并且作为GET请求的参数。

    data:字符串或者对象,作为请求信息数据的数据。 http://www.cnblogs.com/wnvkurt/

    headers:对象,字符串或者函数返回表示发送到服务器的HTTP请求头。如果函数的返回值为空,则headers则不发送。函数接受一个配置对象作为参数。

    xsrfHeaderName:字符串,填充XSRF令牌的HTTP请求头名称。xsrfCookieName:字符串,含有XSRF令牌cookie的名字。 http://www.cnblogs.com/nerjhw/

    transformRequest:函数/函数的数组。转换函数或者一个包含转换函数的数组。转换函数获取http请求体和请求头,并且返回他们的转换版(通常是序列化)。

    transformResponse:函数/函数的数组。转换函数或者一个包含转换函数的数组。转换函数获取http响应体和响应头,并且返回他们的转换版(通常是序列化)。

    paramSerializer:字符串或者返回字符串的函数。用于编写请求参数(指定为对象)的字符串表示形式的函数。如果指令是字符串,那么将被解释为通过$injector注册的函数,这意味着你能通过注册服务方式创建你自己的序列化程序。默认的序列化是$httpParamSerializer;或者你可以使用$httpParamSerializerJQLike。

  • 一般将一个矩阵中的m*n个元素,简称元,数a(ij)的位于矩阵A的第i行,第j列。这个数就被叫做这个矩阵A的(i,j)元。各种的记法就不说了。都是一个东西。明白元。就好。之后就是矩阵是怎么来的。 http://www.cnblogs.com/jvmew/

    其实矩阵一开始是用来表示线性方程组。就像上面讲的一样。给一个图式可能就会明白很多。

    就是这样,在求解线性方程和快速优化DP方程组的时候都特别有用。矩阵快速幂--就是很强大。

    3,矩阵的基本运算。

    这个相比于矩阵乘法就很简单了,简单明了, http://www.cnblogs.com/ymwxyt/  矩阵  这个维基百科讲的很详细,我就简单讲讲。

    1)加减法,矩阵做加法的时候,得满足两个矩阵都是m*n的范围。所以。每一位对应相加就好了。

使用太过简单jqprint源码也极其简洁易懂的更多相关文章

  1. HashMap就是这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树的基础了: Collection总览 List集合就这么简单[源码剖析] Ma ...

  2. LinkedHashMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...

  3. TreeMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面章节回顾: Collection总览 List集合就这么简单[源码剖析] Map集合.散列表.红黑树介绍 HashMap就是这么简单[源码剖析] LinkedH ...

  4. 简单读读源码 - dubbo多提供者(provider)配置方法

    简单读读源码 - dubbo多提供者(provider)配置方法 消费者端dubbo的yml配置 dubbo: consumer: timeout: 300000 protocol: name: du ...

  5. List集合就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识. 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是 ...

  6. 学习写简单Spring源码demo

    最近在研究怎么实现简单的Spring的源码,通过注解的方式来实现对bean的加载管理. 首先先来看下我的工程结构: (1)spring-common:定义了常用的枚举常量,工具类(如FileUtils ...

  7. KBEngine简单RPG-Demo源码解析(1)

    一:环境搭建1. 确保已经下载过KBEngine服务端引擎,如果没有下载请先下载          下载服务端源码(KBEngine):              https://github.com ...

  8. servlet-servlet的简单认识——源码解析

    Servlet的基本认识 本内容主要来源于<看透Spring MVC源码分析与实践——韩路彪>一书 Servlet是server+Applet的缩写,表示一个服务器的应用.Servlet其 ...

  9. UBB/HTML互相转换简单实现源码一览

    查看源码,主要用的就是正则匹配,多的不说,直接读码. 资源原地址:在线UBB/HTML转换 效果图如下 以下源码: <!DOCTYPE html> <html lang=" ...

随机推荐

  1. MySQL字段自增长AUTO_INCREMENT的学习笔记

    1.创建表时指定AUTO_INCREMENT自增值的初始值(即起始值): CREATE TABLE XXX (ID INT(5) PRIMARY KEY AUTO_INCREMENT) AUTO_IN ...

  2. PhpStorm 2016.3 For Mac 重大里程碑更新 -- 终于解决了不能输入中文标点符号的重大bug

    PhpStorm 2016.3 For Mac 重大里程碑更新 1.[终于解决了]不能输入中文标点符号的重大bug,如 逗号“,”.“.”: 2.可以在一个窗体中,同时打开多个项目: 3.其他... ...

  3. c#微信开发 转

    using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...

  4. ftp服务配置文件记录

    因为南京的客户死活要ftp服务而不是sftp,所以我作手用vsftp作为服务器,尝试在windows ftp软件登录进去,特记录vsftp的用法. 配置文件在/etc/vsftpd.conf 有如下代 ...

  5. runtime的黑魔法

    要说明runtime,首先要明白objc这门语言,是基于C的封装.真是因为runtime,objc才有了面对对象的特性. 也就说,所有objc的语言,在运行时都会转换成C. 也是基于这样的特性,run ...

  6. 告别我的OI生涯

    本文章写于2008年12月15日. 随着2008noip的结束,我也结束了我的OI生涯. 信息竞赛也许是从小到大让我最最努力的一件事.我记得参加2006noip初赛前,每天中午为了上信息课都吃不上中午 ...

  7. selenium+testng+ant+jenkins 手记

    会不会搭建测试平台是一般测试工程师和高级测试工程师分水岭 ----tobecrazy 我们项目有现成的测试平台,使用的是selenium grid+testng+ant+jenkins+VM 但是我平 ...

  8. [转]TextView maxWidth maxLength maxEms 区别

    maxWidth=”80dp” 限制TextView最大宽度.必须与layout_width=”wrap_content”搭配使用,当指定layout_width为其他值时,maxWidth会失效. ...

  9. eclipse 粘贴字符串自动添加转义符

    eclipse -> Window -> Preferences -> Java -> Editor -> Typing -> 勾选{Escape text whe ...

  10. 继承的小DEMO

    代码如下 Student.java package four.com; public class Student extends Person { // private String name; // ...