公司:搜狐
搜狐,是一家互联网中文门户网站。1995年,搜狐创始人张朝阳利用风险投资创建了爱特信信息技术有限公司,1998年正式推出搜狐网。2000年,搜狐在美国纳斯达克证券市场上市。
搜狐开发的产品有搜狗拼音输入法、搜狗五笔输入法、搜狗音乐盒、搜狗浏览器、搜狐视频、独立的搜索引擎搜狗和网游门户畅游。
搜狐是2008年北京奥林匹克运动会唯一的互联网赞助商,也是奥林匹克运动会历史上第一个互联网内容的赞助商。
尽管搜狐在首页标题声称自己是中国最大的门户网站,但其Alexa排名却低于同类门户网站腾讯网和新浪。在2018年其在Alexa的中国排名于第5位,在门户网站中仅次于腾讯。现时为中国五大视频网(优酷、爱奇艺、腾讯视频、芒果TV)之一。
Compose自定义布局的使用
我们知道,在Android View体系下,自定义布局需要继承ViewGroup重写onMeasure、onLayout方法,那么在Compose UI框架中该如何实现自定义布局呢?
iOS APP添加桌面快捷方式
新接到一个需求,需要APP内的某些功能,能够把入口添加到桌面,点击桌面到入口可以直接跳转APP对应界面(类似于下面这张示例图),于是就做了一番调研。
其实很多APP目前都已经实现了类似的功能,比如支付宝、云闪付等等,其中的每一个独立功能都可以单独添加到桌面,所以网上有很多实现的方法,笔者做的是整理和试错。
《APP启动优化指南》
2021年初,搜狐视频iOS技术团队开始实施启动优化项目,经过10个月优化后,搜狐视频iOS端启动时间从2秒级,降低到1秒级,优化幅度为46%。我们的技术团队通过多项技术优化和创新,呈现了搜狐视频app自己的启动优化解决方案。
iOS组件化初探
就目前而言,iOS 项目的组件化在业内已经有比较成熟的方案了。虽然各个公司都有自己的组件化方案,但这些方案的具体实现方式也都大同小异。截止到本次组件化改造之前,我所在的 iOS 开发团队尚未对项目进行组件化改造,单个模块在多个项目中的复用仍使用手动复制迁移的方式。现有的一些功能模块也基本是使用 OC 语言开发的。如下图所示,假如现有项目使用了功能模块A,而功能模块A又依赖功能模块B,此时有新项目也要使用功能模块A,就需要将功能模块A和功能模块B的源码全部手动复制到新项目的工程中。
基于Sentinel的亿级网关流量复制方案
API 网关是随着微服务(Microservice)这个概念一起兴起的一种架构模式,它用于解决微服务过于分散,没有一个统一的出入口进行流量管理的问题。
当使用微服务构建整个 API 服务时,一般会有许许多多职责不同的应用在运行着,这些应用会需要一些通用的功能,例如鉴权、流控、监控、日志统计等。
在传统的单体应用中,这些功能一般都是内嵌在应用中,作为一个组件运行。但是在微服务模式下,不同种类且独立运行的应用可能会有数十甚至数百种,继续使用这种方式会造成非常高的管理和发布成本。所以就需要在这些应用上抽象出一个统一的流量入口,完成这些功能的实现。
Go设计模式——观察者模式
观察者模式(Observer Pattern)是一种发布/订阅模式,定义了对象间的一种一对多的依赖关系,一个主题对象(Subject)持有若干个依赖其状态的观察者对象(Observer),而观察者模式则允许多个观察者对象自动接收主题对象的状态变更事件,以各自处置。
灵动岛Dynamic Island初探
最新发布的苹果灵动岛究竟有什么奥妙?来和我一起探索吧!
探秘HashMap的实现原理
HashMap 在键值对存储与查询的功能中一直都是以高效著称,但在某些使用错误的场景下可能会导致性能严重下降。
SPI原理以及SPI在Android中的实战
SPI(Service Provider Interface),是JDK提供的一套用来被第三方实现或者扩展的API,它是一种JVM层面的服务注册发现机制, 可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用。SPI机制主要思想是将装配的控制权移到程序之外,在组件化 设计中这个机制尤其重要,其核心思想就是解耦。
响应式异步非阻塞编程在服务端的应用
对于服务端的开发者而言,我们总有一个共同的目标,那就是如何用更少的资源获得足够的性能来支持我们的服务!,我们不是在性能优化中,就是在性能优化的路上。作为Javaer我们,服务性能优化的武器库中,异步和并发是永远不会过时的两个。
然而理想很美好,现实很骨感:
- 异步编程的思维方式同大脑的命令式思维是背道而驰的。在Java的世界中,直到目前Jdk17,也没有async/await来帮我们解决回调地狱的问题,强行大量异步,将深陷回调地狱而不能解脱...
- 并发调用方面,大量编排异步线程任务,不仅会造成资源的快速消耗,也会导致业务流程的实现难以理解,正所谓:写这段代码时能理解它的只有我和God,一个月后能理解它的就只有God了...。
在服务端引入响应式编程,是解决如上问题的一个好的思路。
下面,我以搜狐视频服务端PUGC团队在PUGC视频对象创建接口的重构工作的实践为背景,介绍响应式(基于RxJava)异步非阻塞编程在服务端的应用在服务端的应用。
通过抓包深入分析HTTPS
HTTP协议和安全协议同属于应用层(OSI模型的最高层),具体来讲,安全协议工作在HTTP之下,传输层之上:安全协议向运行HTTP的进程提供一个类似于TCP的套接字,供进程向其中注入报文,安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应的进程。严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。
你真的懂iOS的异常捕获吗?
在开发的日常中,经常会遇到一些极其偶现的Bug,有些Bug很难以复现,所以一般的解决方案是接入PLCrashReporter这些第三方的崩溃统计工具,从保存的崩溃文件中读取相应的崩溃信息。那么这些崩溃统计工具又是基于什么原理运作的呢?
Android网络请求优化及离线上传封装
在android开发中,无论是去解决网络请求中遇到的问题,还是优化网络请求的效率,都离不开最根本的网络传输协议(http和tcp等),所以本文的第一部分是对网络协议相关的基础知识进行讲解。掌握了必备的基础知识之后,接下来的第二部分,会对android中使用最广泛的网络请求框架okhttp进行分析,这款框架不仅对基础的网络请求逻辑进行了封装,还尽善尽美的替我们做好了几乎每一件可以去优化的事情,如果能很好的理解并使用它,我相信大部分网络请求相关的问题都可以很好的得到解决。本文的最后部分,想说一说我是如何使用kotlin反射对离线数据上传进行封装的。
Jetpack Compose自定义Layout详解
最近在使用Jetpack Compose进行应用开发,不得不说相比较命令式布局方式Xml,Compose声明式UI真香。然而仅使用基础的Compose控件在面对UI大佬的设计图时,总会出现一些“小问题”,包括部分页面不能通过标准布局实现、需要特别精准的控制测量和放置的场景、需要实现布局动画等,这个时候往往需要通过自定义布局去解决这些“小问题”,来达到项目验收标准。既然是要自定义组件,那么首先了解一下Compose的布局模型吧,从布局模型中找到自定义组件的切入点。
try catch finally机制分析
finally代码块是在return后面的表达式运算后,return操作前执行的。
记一次日志引起的服务端问题排查经历
一天中午休息饭后散步时,隔壁组的王老哥提到,他们组的负责的一个Java服务最近一段时间,每天0点,经常会收到网关报警:提示接口响应慢。老板天天追问,但是服务使用的spring组件虽然支持在tomcat线程使用率超过一定数值后自动生成现场快照,但是不知道是什么原因,查看相关时间点附近生成的快照文件,里面的内容均正常,日志内容除问题时间点缺了一些之外,也没有异常现象,所以对于该问题,他是:老虎吃天,无从下爪。