NODEJS--HTTP实现分析

一、前言 目前,HTTP协议是互联网上应用最为广泛的一种网络协议,也是前端er接触最多的一种协议。通过阅读http模块在nodejs中的实现,能够更深入的了解HTTP协议。HTTP协议是基于TCP协议之上的应用层协议,它的实现离不开TCP/IP协议族。而具体到代码实现,http模块依赖于net模块。...

展开...

node中Session持久化与Redis缓存

IC图片目前的管理系统(搜索质量评估、电销、云平台、性能监控、账号体系、图片爬虫)都是基于node前后端全栈开发,数据存储也用到mongodb、mysql、redis,本文简单描述一下HTTP协议、cookie、session、以及node项目中如何引入redis做session持久化 HTTP...

展开...

英文标签的精准翻译

本文主要讲解了自己在工作中,对图库里面的英文标签翻译成中文标签,所遇到的一些问题和解决方案。 一. 问题的背景及来源 业务背景 东方IC(现在是头条的子公司)是一家图片版权售卖网站,致力于保护与传播第三方或者个人优质的图片资源,快速展示并推荐给需求方,促进图片资源在网络上快速生产、传播与使用。东方I...

展开...

基于NSURLCache的缓存实现

东方IC-产品技术部-崔江涛 概览 缓存设计应该是每个客户端程序开发所必须考虑的问题,如果同一个功能需要多次访问,而每次访问都重新请求的话势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择自行创建数据库直接将服务器端请求的JSON(或Model)缓存起来,下次请求则查询...

展开...

APK包资源精简 立减1M

Apk包大小是Android优化的一项重要指标,本文主要从资源方面着手,提出一些优化的新思路。 无用资源精简 项目随着开发迭代,会遗留大量的无用代码和资源,今天主要说一下无用资源如何精简。资源精简最重要的是无用资源的检索,常规检索方式有lint的unused resource,gradle开启shr...

展开...

iPhone X 刘海儿打理指南

只有那些疯狂到以为自己可以改变世界的人,才能改变这个世界。 前言 北京时间今天凌晨1点,苹果再一次让全世界沸腾。iPhone X 带给我们的最大改变:全屏 Super Retina显示屏。它提供了更多的内容显示空间,同时也营造了更加深入的沉浸感。作为 iOS 开发者,在为强大的 Face ID...

展开...

[Diving into WWDC 2017] 如期而至 不负众望

美国西部时间 6 月 5 日上午 10 点,5300 名来自世界各地的开发者齐聚圣何塞,参加苹果一年一度的开发者大会(WWDC),今年头条君也有幸来到现场感受了大会的火热气氛; 最棒的 WWDC 发布会一开始 Tim Cook 即表态这将是苹果历史上最棒的一次 WWDC,而这场超过两个半小时的...

展开...

[Diving into WWDC 2017] Labs 答疑纪实

每年 WWDC 的 Labs 都会有苹果的工程师在现场为开发者解答问题,以下是我们的提问和解答:( Q 为头条君的问题,A 为苹果工程师的解答) Q:如何提升编译速度?我们本地编译一次要 5 分钟? A:5 分钟?那听起来挺快的?(笑);尽量使用静态库,确保 LTO 选项在 Debu...

展开...

[Diving into WWDC 2017] Core ML in depth

机器学习在 iOS 中的应用 Core ML 2017 年的 WWDC 大会苹果赋予了开发者们新能力,能够将机器学习应用在移动端上,着实是一次让人感到兴奋的事情,一颗赛艇!!积极开展的 Session 学习活动,在第一节和第二节引用了一些概念和背景来帮助理解,熟练工请忽略,跳至第三节直接开始操作...

展开...

[Diving into WWDC 2017] Introducing HEIF and HEVC

HEIF 和 HEVC 介绍 观察一下我们生活的当今世界,越来越多的人生产和消费以图像、视频为载体的内容。不仅如此,这些媒体内容也在不停的变换新的格式,比如高分辨率的 4K 视频,HDR 视频。媒体的生态也在发生着改变。但是这些变化也受到了带宽等传输上的限制。所以目前大范围使用的 H.264 编...

展开...

[Diving into WWDC 2017] Engineering for Testability

测试的工程化 一、前言 单元测试可以帮助开发人员持续验证代码能否正常工作。但是,编写单元测试依赖现有代码的可测试性,开发人员需要不断探索代码重构的技术,确保代码容易被测试,通过重复的循环迭代,形成最佳实践和一套对应的测试集,伴随着应用一同迭代。 二、可测试的代码 在现有代码中引入单元测试的作用主要有...

展开...

[Diving into WWDC 2017] Updating Your App for iOS 11

为你的 App 适配 iOS 11 活着就是为了改变世界,难道还有其他原因吗? - 史蒂夫·乔布斯 前言 想先看原视频的点这里 iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 下面一起了解一下如何在应用中采用新功能,包括具有集成了搜索的大标题栏,文字图标横向排列的...

展开...

Web安全之XSS

什么是XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会...

展开...

头条APK瘦身之路

随着版本迭代,功能增加安装包体积也会慢慢增大。 今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。 APK分析 既然是要优化APK的大小,那首先就得看下APK文件的构成。 Android Studio在2.2版本添加 A...

展开...

域名劫持资源重加载方案

痛点: ​ 在部分用户的网络环境中,页面CDN域名被劫持,导致前端资源无法正常加载,而页面主域名正常,导致页面可以访问,但是功能不正常。 背景: ​ 通常来说,主域名一般都是众所周知的域名,运营商一般不会劫持(本文特指劫持后导致无法加载,注入这些不在本文考虑范围内),主域名被劫持的可能性...

展开...

内涵Golang DAO

背景: 内涵近段时间迁移了部分API代码到Golang,主要是为了使用Golang中方便的goroutine。但是开发中很多冗余代码需要重复开发(缺少一个组件能够收敛各种RPC调用,复用代码,减少开发量),同时,又不希望组件使用过多的黑魔法,导致结构复杂,开发维护麻烦。 要求 综上...

展开...

Redux源码剖析及应用

使用redux+react已有一段时间,刚开始使用并未深入了解其源码,最近静下心细读源码,感触颇深~ 本文主要包含Redux设计思想、源码解析、Redux应用实例应用三个方面。 背景: React 组件 componentDidMount 的时候初始化 Model,并监听 Model 的 chang...

展开...

iOS音视频同步探讨

音视频同步是我们观看视频的一个基本体验,尤其对于视频画面中能看到声源动作(如:嘴型)的场景,音视频同步问题非常影响体验。 在短视频与直播APP中,采集端作为音视频的生产者,如果采集端产生的音视频源本身就无法保证同步,那么后面不管经过什么处理,都很难再让用户看到音视频同步的画面了,因此,在采集端保证音...

展开...

机器内存爆满问题排查

1 背景 两周前广告开屏服务突然503报警不断,先查看了各种业务监控没发现流量等有什么大变化,因为不久之前出过一次机器出问题的情况,马上去查看了机器是不是正常,果然内存几乎涨满了。大概十来分钟内存就会达到90%多,然后进程就重启了,但是从日志来看并没有什么异常情况,好在并没有将机器拖死。当时第一件事...

展开...

iOS端一次视频全屏需求的实现

对于一个带有视频播放功能的app产品来说,视频全屏是一个基本且重要的需求。虽然这个需求看起来很简单,但是在实现上,我们前后迭代了三套技术方案。这篇文章将介绍这三种实现方案中的利弊和坑点,以及实现过程中积累的经验。 需求要点: 在屏幕旋转的动画中,需要保持播放器之外的界面布局(比如“First Vie...

展开...

头条视频详情页新交互实现方案

背景 头条视频App在1.0.8版本中准备优化打开详情页的交互体验。目的是使打开详情页显得更轻,减少用户进入详情页的交互成本,提升详情页的打开率。 首先来看下新旧交互方式的对比(左为旧交互,右为新交互): 新旧交互的主要差别在,从列表页中播放视频切换到详情页播放视频的过程中,视频是不会暂停的,...

展开...

mc集群写入恍惚问题排查

1.现象 业务方反馈在向memcache集群写入数据时,出现不稳定。表现为向mc写入一个creative和ad对象的list,有的时候能写进去并读出来,有的时候写成功但是读不出来。 2.问题排查 2.1 复现问题 a.有的key没有问题,能够一直写+读。 b.有的key一直都是写ok,读None。...

展开...

Redis migrate slots丢key排查

1.问题 redis slots迁移的时候,在迁移之后key数量会变少. 2.排查 2.1思考 redis 3.x也是比较成熟的产品了,为什么会丢key?别人有没有遇到同样的问题? 假设丢key了,如果key是因为expire丢失,那应该是正常,如果没有expire丢失,就是问题了,首先复现问题。...

展开...

webpack前端构建性能优化策略小结

背景 回顾2016的前端技术的发展真的可以用百(gui)花(quan)争(zhen)鸣(luan)来形容,无论是技术栈的演进,技术框架的推新,还是各种模式,反模式的最佳实践都在不断地涌现,网上的一篇文章《在2016年学JavaScript是一种什么样的体验?》更是把这一现状做了很好总结。当然,吐槽归...

展开...

今日头条iOS客户端启动速度优化

应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、视频等),也接入了很多第三方的插件,这势必会拖慢应用的启动时间,本着精益求精的态度和对用户体验的追求,我们希望在业务扩张的同时最大程度的优化启动时间。 技术调研 先说结论,t(Ap...

展开...

从前端到全端:JavaScript逆袭之路

JavaScript如何做到上天入地无所不能?JavaScript真的能一统江湖吗? 背景 近年来,前端技术日新月异,前端已经不仅仅是网页,更多的开始由狭义向广义发展。 先后涌现出了具备后端能力的node,具备移动开发能力的react native,具备游戏渲染能力的cocos2d-js,以及i...

展开...

iPhone安装包的优化

这是一次安装包大小优化的实践。 随着业务的增加,工程中引入越来越多的业务代码和第三方库, 整个安装包越来越大。以今日头条5.7.5为例 最近几个版本的ipa大小如下: 5.7 -> 72.2M (+0.8M) 正常业务增量 5.6 -> 71.4M (+14M) 主要原因:接入某SDK后安装包的...

展开...

日志辅助工具timecat

今天我要分享一个用于对日志文件进行二分查找的工具:timecat 0 用途 在线演示页面:http://aap.reetsee.com/page/timecat 不想看后面的直接看这一节就行。 timecat可以对线上的所有日志进行二分查找,常见需求是到了线上机器后想将某个时间段的日志直接读出来,不...

展开...

头条PC站基于RIOT的组件化开发实践

Riotjs是一种小而美的js框架 背景 1、头条PC站业务前端重构 * 旧站架构强依赖后端模板,维护和扩展非常不灵活 * 资源文件存在依赖,无法做到最简压缩合并 * 代码组织混乱,虽有基本的模块化开发方式,但整体维护和扩展非常麻烦 2、为什么选择Riot? * Angularjs学习成本...

展开...

H5播放器源码解读 (video.js)

写在前面 现在视频业务越来越流行了,播放器也比较多,作为前端工程师如何打造一个属于自己的播放器呢?最快最有效的方式是基于开源播放器深度定制,至于选择哪个开源播放器仁者见仁智者见智,可以参考开源播放器列表选择适合自己业务的播放器。 我们的播放器选择了排名第一的video.js播放器,截至目前该播放器在...

展开...

线上问题深度追查:信号处理函数中的死锁

这是一则关于死锁的故事,谨以此文进行记录分享。 背景 svc是deamon-tools工具集中用户守护进程的服务,头条目前在线上使用它来保证服务的存活(目前正在切换到更可靠的systemd)。当进程挂掉时,svc能自动重启挂掉的进程,当被监控的进程有代码更新时,我们可以通过svc发送命令让进程...

展开...