使用太过简单jqprint源码也极其简洁易懂

时间:2022-06-06 21:11:21

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

    属性相关

    使用太过简单jqprint源码也极其简洁易懂
    $("#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
    });
    使用太过简单jqprint源码也极其简洁易懂

    从图中我们可以知道

    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/

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

    使用太过简单jqprint源码也极其简洁易懂

    就是这样,在求解线性方程和快速优化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多提供者&lpar;provider&rpar;配置方法

    简单读读源码 - 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源码解析&lpar;1&rpar;

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

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

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

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

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

随机推荐

  1. MongoDB学习笔记~自己封装的Curd操作&lpar;查询集合对象属性&comma;更新集合对象&rpar;

    回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象 ...

  2. 【leetcode】 Generate Parentheses &lpar;middle&rpar;&star;

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  3. 夺命雷公狗---Thinkphp----3之后台搭建

    我们这里来搭建我们网站所需要用到的后台: 我们直接打开WEB目录,然后直接赋值Home文件粘贴并改名为Admin,效果如下所示: 然后修改他的控制器: 代码修改成如下所示: <?php name ...

  4. 正则表达式删除指定的HTML 标签

    1.抓取某网页的数据后(比如描述),如果照原样显示的话,可能会因为它里面包含没有闭合的HTML标签而打乱了格式,也可能它里面用了比较让人 "费解" 的HTML标签,把预订的格式搅乱 ...

  5. java随机数生成(固定位数)

    随机生成 a 到 b (不包含b)的整数: (int)(Math.random()*(b-a))+a; 随机生成 a 到 b (包含b)的整数: (int)(Math.random()*(b-a+1) ...

  6. 虚拟机如何访问tomcat

    首先需要把tomcat和jdk整到虚拟机里,然后再在虚拟机里安装tomcat和jdk. 一.怎样把tomcat和jdk整到虚拟机里? 1,需要“ha_Serv-U6406 ftp服务器”的帮助,所以先 ...

  7. &lbrack;BZOJ 3236&rsqb; &lbrack;Ahoi2013&rsqb; 作业 &amp&semi;&amp&semi; &lbrack;BZOJ 3809&rsqb; 【莫队(&plus;分块)】

    题目链接: BZOJ - 3236   BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...

  8. PHP的数组值传入JavaScript的数组里

    <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html><head>       &l ...

  9. C&plus;&plus;标准模板库(STL)之Stack

    1.Stack的常用用法 stack:栈,一个后进先出的容器. 1.1.stack的定义 加上头文件#include<stack>和using namespace std; stack&l ...

  10. python之常用模块4

    pyinotify模块 pip3 install pyinotify pyinotify提供的事件: 事件标志 事件含义 IN_ACCESS 被监控项目或者被监控目录中的文件被访问,比如一个文件被读取 ...