公司:搜狐
搜狐,是一家互联网中文门户网站。1995年,搜狐创始人张朝阳利用风险投资创建了爱特信信息技术有限公司,1998年正式推出搜狐网。2000年,搜狐在美国纳斯达克证券市场上市。
搜狐开发的产品有搜狗拼音输入法、搜狗五笔输入法、搜狗音乐盒、搜狗浏览器、搜狐视频、独立的搜索引擎搜狗和网游门户畅游。
搜狐是2008年北京奥林匹克运动会唯一的互联网赞助商,也是奥林匹克运动会历史上第一个互联网内容的赞助商。
尽管搜狐在首页标题声称自己是中国最大的门户网站,但其Alexa排名却低于同类门户网站腾讯网和新浪。在2018年其在Alexa的中国排名于第5位,在门户网站中仅次于腾讯。现时为中国五大视频网(优酷、爱奇艺、腾讯视频、芒果TV)之一。
记一次日志引起的服务端问题排查经历
一天中午休息饭后散步时,隔壁组的王老哥提到,他们组的负责的一个Java服务最近一段时间,每天0点,经常会收到网关报警:提示接口响应慢。老板天天追问,但是服务使用的spring组件虽然支持在tomcat线程使用率超过一定数值后自动生成现场快照,但是不知道是什么原因,查看相关时间点附近生成的快照文件,里面的内容均正常,日志内容除问题时间点缺了一些之外,也没有异常现象,所以对于该问题,他是:老虎吃天,无从下爪。
iOS下锁的独白
锁是什么?用于防止多线程访问同一份资源而造成资源竞争的计算机锁(生产者消费模式是衍生品)。
探秘Weak实现原理
在项目中我们经常用到weak指针,其可以保证在指向的对象释放后,weak指针自动置为nil,以防止崩溃,因为在OC中向nil发送消息是没有任何处理的。通过__weak、property weak等形式,都可以将指针修饰为weak类型的。
weak的实现原理其实很简单,概括来说就是,在内存中有一个名为weak_table_t的哈希表,weak_table_t中存储着App所有的weak对象及指针。当有对象被weak指针修饰时,会将被修饰的对象及指针添加到weak_table_t表中。当被weak指针的作用域消失时,weak指针会被销毁,随后会 从哈希表中查找对应的weak指针,并将指针置为nil。
这⼀次彻底弄懂:React 服务端渲染
在前端项目需要首屏渲染速度优化或SEO的场景下,大家或多或少都听过到过服务端渲染( SSR ),但大多数人对服务端渲染具体实现和底层原理还是比较陌生的。本文基于公司官网开发时做了服务端渲染改造基础上,系统理解和梳理这套体系的模式和逻辑,并写了一些笔记和Demo(文后链接)便于深入理解。这次我们来以React为例,把服务端渲染彻底讲弄明白。
Swift后缀表达式(逆波兰式)转换计算
最近在开发《挑战24点》的过程中遇到了一个问题,即,如何计算常用数学表达式的结果,比如,给定字符串8 - (6 + 4 / 2 - 1) * 2
,怎么计算得到结果,并且得到计算的过程。
网上查资料发现,大部分都是类似系统计算器的处理,在遇到第二个运算符时,就把前一步的操作结果计算出来。这样的处理方式并不适用 于笔者想要解决的问题。
进一步搜索后发现,前缀表达式、中缀表达式、后缀表达式的概念,给定的字符串8 - (6 + 4 / 2 - 1) * 2
属于中缀表达式,而想要计算机得出结果,可以转为前缀表达式或者后缀表达式,然后再对转换后的表达式进行计算。
这里采用中缀表达式转后缀表达式,然后计算后缀表达式得出结果
探秘AutoreleasePool实现原理
在ARC下,AutoreleasePool主要应用在大量创建临时对象的场景,通过AutoreleasePool控制内存峰值,是一个很好的选择。
iOS包体积优化实践
最近领导给我分配了包体积监控指标,恰好之前我也做过相关包体积的优化,于是便综合之前的实践经验,对此我们的项目的包体积优化做一个整体的记录,希望可以帮助有需要的小伙伴。
图片中多个二维码选择的实现
买早餐的时候会遇到,支付宝和微信两个二维码一起被识别出来的情况,处理起来比较麻烦。最近有时间,就来分享记录一下图片中多个二维码选择的实现过程。
一个微信小程序的渐进式优化之路
入职搜狐后我开展的第一个项目就是微信小程序。谈起小程序开发,生态封闭、坑多路滑、开发工具难用等槽点是一定不能被忽视的,因此市面上也涌现了一大批诸如 mpvue、taro 这样的抽象程度更高的小程序开发框架。我负责的这个小程序项目并没有采用这些第三方框架,而是选择在原生技术栈的基础上进行了一系列的优化和定制。
去年 8 月份 (2021.08),小程序的版本已经来到了 4.0.0。经历了长达一年的渐进式优化,这个小程序项目的开发体验也勉强达到了“好用”的水平,于是我写下了本文并在组内做了技术分享。技术分享后我就想找时间把文章脱敏并公开,结果拖延症发作一直鸽?️到了 2022 年。。。今天终于狠下心来重新梳理了这篇万字长文,希望能帮助到需要开发小程序的你。
视频下载加速,2.5倍优化
视频缓存已经成为各大视频App的标配,并且从功能使用数据来看,每个月使用的量都很大。为了提升用户体验,提升缓存速度,我对缓存进行了速度优化,提升了网络利用率。
Swift协议与关联类型
本文将讨论Swift协议(Protocol)中特殊的关联类型(Associated Types),它与泛型(Generic)有相似性和又有区别。
子线程更新UI全解
本文主要着眼于子线程不能更新 UI 和能更新 UI 的底层原理,了解了 Activity View 树的构建流程、更新 UI 的基础流程。
搜狐智能媒体基于Zipkin和Starrocks的微服务链路追踪实践
本文主要介绍搜狐智能媒体,在微服务体系架构下,使用zipkin进行服务链路追踪(Tracing)的埋点采集,将采集的Trace信息存储到starrocks中,通过starrocks强大的SQL计算能力,对Tracing信息进行多维度的统计、分析等操作,提升微服务监控能力,从简单统计的Monitoring上升到更多维度探索分析的Observability。
探秘OC消息发送机制
一起深入探秘OC消息发送机制。
理解GPUImage2中的Pipeline核心原理
本篇文章以Swift版本的GPUImage2为分析对象,以GPUImage中Pipeline的处理流程为线索,分析其核心的实现流程设计理念,使得我们不但能够理解其核心原理,也能够从中获得有益的经验,运用到自己的编程设计中。
iOS 直播流程概述
本文目的在于带大家了解一场直播背后,需要经历哪些阶段,以及每个阶段都做了哪些工作,才能够把主播的声音画面送到观众的面前。下文把直播的流程划分为:采集、处理、编码、封装、网络传输、播放六个部分来一一介绍。