hive sql 调优

hive 其实是用 sql 来开发的 mapreduce 任务,其中的一些有优化技巧和 sql 优化也有相同的地方

在经过一周的 sql boy 历练以后,写 sql 的水平也算是更上一层楼了

虽然说hive 跑的都是t-1的离线数据,不怎么需要在意运行时间,但是比较 yarn 集群资源有限,使用尽量少的资源来完成尽量多的工作也是很棒的!这里总结一下一些 hql 优化上的技巧

微服务技术调研

csrf那些事

好文分享

广告技术

由于第一份工作是在字节的广告商业化部门,所以对于广告以及变现这一方向有了一些涉猎和理解

  • 万字长文——互联网广告到底是如何运行的?

  • PGC, UGC, OGC 区别

    UGC:User-generated Content的缩写,用户生产内容。又作UCC。

    PGC:Professionally-generated Content的缩写,专业生产内容。

    OGC:Occupationally-generated Content,品牌生产内容。

    以快手和抖音作对比,快手推送的短视频偏向于UGC,这样的短视频更加多元下沉,对于中尾部的创作者来说更加友好,这也是快手让人感觉接地气的原因~。
    而抖音更偏向于头部达人,头部达人的作品曝光率占比非常高,他们的创作水平/专业化程度也非常高,用户看到的内容PGC占比较多,所以大部分人感觉抖音的视频质量较高,内容更酷炫。
    OGC内容就有很多例子,比如虎嗅网上的专业作者,他们生产专业的内容,平台为其付费,这类内容的目的在于从你的口袋里掏出钱,当然这部分内容的质量也是最高的的。

deepin20使用快捷键启用/禁用触控板

背景

  1. 从windows切换到deepin,并将deepin作为日常主力系统

  2. 外出工作,没有外接键盘,需要使用笔记本电脑自带的软键盘

  3. deepin20或者说linux的失去焦点策略为单击,比如在你打字输入的时候,只要点击一下输入框外面的部分,光标就会消失,失去焦点;而windows的失焦策略为双击,需要点击两下才会失去焦点。(两者在使用输入法时实测)

  4. 由于(3)的存在,只要打字时不小心碰到触摸板一下,就会失去焦点,并且丢失还在输入的内容,非常麻烦

  5. deepin v20中只有在设置中关闭触控板的选项,并没有快捷键

解决方案

  1. 物理解决:随身自带一个外接键盘,这样就不会误触了。

  2. 编写shell,映射快捷键

    1. 创建一个内容如下的shell,命名为touchpad.sh,内容为

      #!/bin/sh

      enable=$(gsettings get com.deepin.dde.touchpad touchpad-enabled)

      if [ $enable = true ];then
      gsettings set com.deepin.dde.touchpad touchpad-enabled false
      fi

      if [ $enable = false ];then
      gsettings set com.deepin.dde.touchpad touchpad-enabled true
    2. 将其移动到 /usr/bin/ 目录下,运行

      mv touchpad.sh /user/bin
    3. 给这个脚本执行权限

      sudo chmod 744 /usr/bin/touchpad.sh
    4. 设置 -> 键盘与语言 -> 快捷键 -> 新建快捷键,在命令选项中选择 /usr/bin/touchpad.sh,快捷键自己设置。

    5. 这样就可以通过自己设置的快捷键一键切换触控板使用/禁用状态了,当你需要进行文字输入时,按下快捷键,禁用触控板。结束输入的时候,再按一次快捷键,使用触控板。

mit6.824

lab1 已经完工,但是遵循

Collaboration Policy

Please do not publish your code or make it available to current or future 6.824 students. github.com repositories are public by default, so please don’t put your code there unless you make the repository private. You may find it convenient to use MIT’s GitHub, but be sure to create a private repository.

所以我的代码就不开源了,所有的笔记我会在学习完所有课程,做完四个 lab 后整理后开源。

upd: 做完第一个 mapreduce 后就没时间做其他的了…

快手kcode程序设计大赛初赛总结

最终分数:13622.19
仓库地址:https://github.com/ayang818/KCoder-First

upd: 2020/7 复赛结束,最终排名 28/647
复赛赛题详情及代码: https://github.com/ayang818/2020-kcode-2r
复赛的文件格式和处理读入流的方式和初赛差不多,最重要的查找计算最长链路的核心代码——https://github.com/ayang818/2020-kcode-2r/blob/master/src/main/java/com/kuaishou/kcode/KcodeAlertAnalysisImpl.java#L319 , 使用记忆化搜索完成,其余常规思路可以参照初赛(感觉自己初赛写的代码拓展性还行)

为时14天的kcode初赛算是结束了(6/17 - 7/1),由于个人的时间安排关系,我差不多是从24号开始正式开始写代码的。由于分数不算很高,排名按照封榜前大概是 (20 ~ 30) / 100,估计还有一大堆没写出来的,毕竟群里900多号人,但是前10的大佬们已经基本都是2.5w+了,但是由于爬分的过程还是非常有趣的,所以还是还是打算写一篇博客来梳理一下优化的过程。

我的爬分过程:600 -> 3600 -> 5000 -> 9400 -> 11000 -> 13600

使用Jetpack的Architecture工具降低Android开发中的耦合度

简单项目示例地址——https://github.com/ayang818/AndroidRookie
写这篇文章并不是因为要转android了(从大一上的时候光速学了三天,糊弄了一下android课的作业后就再没写过了QAQ),而是最近看到一篇关于在android使用MVC,MVP,MVVM的架构方法的文章,感觉写的很好,就想来自己试一试android的几种解耦方法,触类旁通嘛~。此处也花了几个小时顺便快速学了一下android和其算是趋势的jetpack,故作此博客。

在编写Android代码的时候很容易在一个activity中就编写出耦合度特别高的代码,导致项目不利于维护。下面是几种常见的解决方案解决方案:

[优化]Java中大文件IO的优化策略

Java中的IO方式大致分为如下几种

  1. 普通IO,也叫做BIO,基于流模型的阻塞式IO,相关的类大部分都是InputStream,OutputStream,Reader,Writer下的子类。
  2. NIO,也是大家认为效率较高的IO方式之一,相关的类有 ByteBuffer,FileChannel等。
  3. mmap内存映射,这是一种将文件直接映射到内存地址的方式,是一种非常快速的IO方案,相关的类有FileChannel,MappedByteBuffer

但是在分析各种IO方式的优化策略的时,首先至少需要了解一下,使用Java进行一次磁盘读取,到底进行了那些步骤?

标准的一次文件读肯定涉及以下几个拷贝步骤

  1. 将数据从硬件读取到内核态的内核缓冲区中
  2. 将内核缓冲区的数据读取到用户态的 JVM 中

此外,底层通过 write 、read 等函数进行 IO 系统调用时,需要传入数据所在缓冲区起始地址和长度,但是由于我们使用的是 Java,Java 中的对象存在 Java 的堆中,由于 GC 的存在,对象在堆中的位置是会不断变动的,所以在用户态的 JVM 和 内核缓冲区之间,还有一个不会被 GC 所干扰的堆外内存区作为缓冲区,所以这里又多了一个拷贝步骤。

[DevOps] 使用Azure pipeline + Github为你的应用构建CI/CD流水线

2020/11 upd :文章应该咕咕咕了,但是具体内容可以参照我的视频

什么是 DevOps ?什么是 CI/CD 流水线?

这个问题由于网上已经有很多很好的文章了,所以我这里就不再详细写了。大家可以自行参考。
什么是DevOps?什么是 CI/CD 流水线?

我归纳一下,

  1. DevOps是敏捷开发的一种主流实现方式,相比于传统的瀑布模型,DevOps为我们快速开发应用,快速发布应用,快速部署应用提供了一种方法论。
  2. DevOps中大致有如下几个环节
    1. Version Control (版本控制)
    2. Continuous Integration(持续集成)
    3. Continuous Delivery (持续交付)
    4. Continuout Deployment(持续部署)

如何为你的应用搭建完整的 CI/CD 流水线

在这篇文章中,我们将使用 Git + Github + Docker + Azure pipeline 的组合来完成一个简单的 node 服务端应用的自动化流水线的搭建。

  1. 创建一个node应用

    1. 初始化项目

      npm init
    2. 安装typescript

      npm install -g typescript
    3. 初始化为TypeScript应用

      tsc --init
    4. 安装我们需要的 express 依赖

      npm install express @types/express
    5. 编写一个最简单的Web应用

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×