自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 RGB、YUV、HSV和HSL区别和关联

RGB、YUV、HSV和HSL区别和关联近期在做的一个需求和颜色转换有关系,所以本篇将开发过程中比较常见的 四种颜色 进行一番梳理。一、RGB颜色空间从我们最常见的RGB颜色出发,RGB分别对应着 Red(红)、Green(绿)、Blue(蓝),也就是我们平时所说的三原色,调整这三种颜色的比例,可以搭配出所有的色彩。这时你可能就要问了,YUV、HSV、HSL也能描述所有色彩啊,为啥RGB是最常用的捏?这就要回归到现实了,现实里显示器显像时,每一个像素点后面对应着 3个发光二极管,这3个二极管可以

2022-03-20 21:34:14 9119

原创 CPU是海王?聊聊 主/子线程 和 同/异步 的关系

最近表弟一直在找实习,经常会问我一些问题,有些问题在没有经历过真实工作时是真的不好理解的,所以我开了这个【表弟专栏】,专门为找工作的表弟解决一些疑惑。这篇文章从计算机发展的角度出发,描述为什么计算机需要划分 "主/子线程" 和 "同/异步",希望这个故事你能喜欢。开天辟地,计算机"老计"诞生话说几十年前,老计(初代CPU)诞生了,老计诞生初期帮人们解决了诸多繁琐的计算工作,他可以无休无止地按照人们给的指令进行运算。就像图中一样...

2022-03-19 16:59:20 310

原创 SourceTree代码变更和FoxMail邮件管理(效率小计俩)

代码变更溯源工作时,我们经常会想要查看一个类文件的变更历史,最常见的场景是:"卧槽,谁改了我的代码"新版本的Xcode溯源自我感觉相当难用,所以这里我们介绍一个工具 SourceTree 来完成这项工作。将项目工程加载到 SourceTree当我们把项目工程拖到 SourceTree 之后,可以看到如下的内容:其中BNBitcoinIndexApp是我的项目工程名。检索文件选择 ①文件状态 -> ②搜索文件 -> ③查看选中的修改日志查看文件变更

2022-03-19 02:37:47 301

原创 SpringBoot架构关键词全解

一、核心配置文件一个项目中 application.yml 和 application.properties 只能有一个。(一)application.properties# 设置内嵌Tomcat端口号server.port = 8081#设置上下文根server.servlet.context-path = /springboot(二)application.ymlYML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑

2022-03-13 22:28:26 6469 3

原创 操作数据库你不得不知道的 事务 理念

无论是 iOS操作DB、还是 SpringBoot中Service操作Mybatis,都需要涉及到 事务 的概念,如果你在新增一个 DB 增删改 的接口时,没有考虑到事务,那么你新增的接口一定是有问题的。理解事务事务是指对系统进行的一组操作,为了保证系统的完整性,事务需要具有ACID特性,具体如下:1. 原子性(Atomic)一个事务包含多个操作,这些操作要么全部执行,要么全都不执行。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。回滚实际上是一个比较高层抽象的概念,

2022-03-13 22:27:07 64

原创 编写第一个GET、POST接口[renren-fast框架系列(1)]

配置好 renren-fast 脚手架,学习完 Spring MVC 架构后,我需要具体调试 renren-fast 的接口,比如要新增某个接口。什么是前后端分离运行 renren-fast 项目时,我们访问 http://localhost:8080/renren-fast/ 的结果:可以看到,接口给出了相应的回应,状态码 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。运行 renren-fast-vue 项目时,我们访问 ht

2022-03-13 22:23:26 4934

原创 怎么赏析艺术作品?

从小我就经常看到一些充满魅力的艺术作品,但经常会对不同表达风格的艺术作品产生疑惑,所以这篇文章将我近期学习到的艺术发展进程进行一个梳理。艺术的表达方式有着很多的主义,这里我罗列历史进程上我认为最具有代表性的三个发展方向,和大家一起赏析。古典艺术首先是古典艺术,古典艺术涵盖的年代可以从人类诞生之初到相机出现之前,这个时间段人类是没有机器来记录的,只能通过雕塑、画画来记录,所以这个阶段强调的是:具象和完美。具象 就是表面意思:画的要像,而且要把事务最经典、最美好的一面展示出来,但具象并不等价于 真实。

2022-03-09 02:21:39 358

原创 抖音和微博:两种不同的@人方案

抖音和微博:两种不同的@人方案基本上知名的app都有一个功能:@人,虽然功能很普遍,但以抖音和微博为主,这两家实现@人背后的产品逻辑是不一样的,今天我们就来阐述一下@人背后的产品逻辑。首先,我们先从操作上入手,介绍下两者的区别:一、区别1. 抖音打开抖音,如果你手动输入了@xxx,你会发现xxx并没有高亮变成可点态,即使xxx这个用户是真的存在,而只有从@人列表选出的用户(@yyy)才会被高亮。且当你想删除@yyy中一个字符时你会发现并做不到,要删只能把”@yyy”全部删除,但@xxx是

2022-03-09 01:27:48 279 2

原创 打造高可用iOS进度条

前言做全屏的需求时,因为进度条会从半屏背景下的「基本不可能曝光」,变成全屏场景下「高频曝光」,所以需要打造一个丝滑、高可用的进度条,想当初我Debug到凌晨4点,就是为了解决暂停后进度条的动画问题。今天把这个进度条的架构、设计逻辑和踩过的坑都整理一下。本文涉及的代码已开源至Github:打造高可用进度条接口介绍BNCommonProgressBar.h// 变更进度,animateWithDuration是传入动画时间- (void)setValue:(CGFloat)value;- (v

2022-03-09 01:26:50 2308

原创 使用 Time Profile 定位可复现掉帧bug

前言自工作以来查过N个卡顿掉帧的bug,类型有下面几种:IO 大量读写,前台主线程卡顿滚动时触发类似大量计算等复杂逻辑Debug模式下日志暴打反馈卡顿掉帧问题的有两种情况:对于能复现的掉帧卡顿问题:基本是通过 Time Profile 进行定位的对于不能复现的掉帧卡顿问题:是通过拉取 卡顿堆栈 + 客户端日志定位的(涉敏,遂不在博客帖出)这篇文章聊一下如何 通过 Time Profile 定位可复现掉帧bug,先聊使用用法,然后聊一聊原理。一、使用 Time Profile 进

2022-03-09 00:24:47 758

原创 UIView动画高频调用和scrollview滚动冲突

近期查了两个和动画相关的两个bug,都是比较隐秘的特性,清楚这两点绝对可以让你少踩很多坑。UIView动画高频调用现在有如下一个函数:- (void)runAnima { NSUInteger fromCount = self.count; self.count ++; NSUInteger toCount = self.count; [UIView animateWithDuration:3 animations:^{ [self.scrollView

2022-03-09 00:24:15 414

原创 iOS编译过程的原理和应用

阅读本文你将收获:iOS编译流程明确 text、data 的含义iOS dSYM 的作用和生成方式明白iOS crash堆栈符号化解析流程source:iOS编译过程的原理和应用iOS 如何调试第三方统计到的崩溃报告iOS Link Map File 文件说明前言一般可以将编程语言分为两种,编译语言和直译式语言。像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。像JavaScript,P

2022-03-09 00:23:42 2317 1

原创 Proxy消息转发实战

友情提示:点击查看本文所涉及的demo代码导语代理即是代表授权方处理事务(From Wikipedia)。思考一下我们生活中什么时候会用到代理呢?租房、买房时,我们需要一位中介帮我们联系房东,处理手续上的事情,降低我们和房东的沟通成本。叫外卖时,我们需要外卖小哥帮我们送外卖,好让我们有更多时间去专注别的事情。所以可以理解为中介帮我们解决两个层面上的问题:减少互相依赖的问题减少做重复的事情所以从本质上来说,Proxy体现的还是"中间层"的设计思想,具体应用于"

2022-03-09 00:22:14 291

原创 Objective-C 之 block

前言作为iOS开发,我们平日里会高频使用block,block非常重要,在学习Swift闭包时,我突然觉得可以将 Objective-C block 和 Swift闭包 一起对比学习。如果你针对下面的问题已经有了比较深的理解,那么可以略过本篇文章:block 的数据结构block 的内存机制block 和 weakify/strongify 的关联Swift闭包和 Objective-C block的区别dispatch_block_t 的应用场景一、block的数据结构(一)bloc

2022-03-09 00:21:38 472

原创 如何优雅地压缩一张图片

平常开发中我们经常会接到这样的需求:上传图片前,需要把图片压缩到100KB以下,且要尽可能的清晰。作为一名有直觉的开发,我们即刻三下五除二搞个压缩因子:NSData *imageData = UIImageJPEGRepresentation(image, 0.8);(为什么不用 UIImagePNGRepresentation 而使用 UIImageJPEGRepresentation 可以Google,这里不做解释了哈)结果发现用户可能会选择10MB的图片,0.8的压缩因子只能压到3MB,这肯定不

2022-03-09 00:17:42 226

原创 产品思维已死? 我看未必

本文将按照以下顺序阐述:一、产品思维和产业思维辨析二、产品如何致瘾?三、新思考到的方法论01一、产品思维和产业思维辨析今天看完《猫眼郑志昊:连接、赋能、破界是互联网下半场的创新法则》这篇报道后,颇有领悟,文章开篇即言:"产品思维已死",推崇"产业思维",这里我摘抄一下文章中对于 产品思维和产业思维的 阐述 :产品思维已“死”,不能做好产业,你会输的很惨产品思维的关键逻辑包括: 产品细节、体验细节、转化率以及商业平衡系统,此外还有流量、入口以及产品整合...

2020-11-22 15:02:24 1326

原创 客户端加载耗时优化方案(下)

“在刷新加载loading的过程,经历了1.客户端触发顶部刷新2.服务器收到请求后准备要下发的数据 3.客户端收到服务器数据进行展示。”接上一篇文章:客户端加载耗时优化方案(上)本篇文章将从第二阶段"服务器收到请求后准备要下发的数据"和第三阶段"客户端收到服务器数据进行展示"讨论耗时优化的策略。第二阶段:"服务器收到请求后准备要下发的数据"01预计算在客户端发起请求后,服务器侧一般会接入推荐系统,计算各种必要数据后,再把相应内容进行下发。那么能不能提.

2020-11-18 01:07:41 215

原创 客户端加载耗时优化方案(上)

任何一件事情的发生可能背后有很多种原因,要解决好一个问题,都要明确造成这个问题的原因是什么,然后针对这些原因进行优化。在刷新加载loading的过程,经历了三个阶段:客户端触发顶部刷新->服务器收到请求后准备要下发的数据->客户端收到服务器数据进行展示。本文针对第一阶段:"客户端触发顶部刷新"聊一聊怎么减少耗时问题。(下一篇文章会针对另外两个阶段阐述优化方案)01交互层面:使用占位策略缓解用户焦虑app某个界面一直空白,或者界面一直在转...

2020-11-18 01:02:34 619

原创 点击按钮,要立即响应吗?

人们往往把任性也叫做自由,但是任性只是非理性的自由,人性的选择和自决都不是出于意志的理性,而是出于偶然的动机以及这种动机对感性外在世界的依赖。 ——黑格尔那天,产品小刘和开发老王对完方案后,在开发具体实施过程中老王问了小刘一个问题:"用户点击拉黑按钮后,响应是要前置还是后置?"首先我们要理解开发口中说的"响应前置"和"响应后置"的含义,先从用户点击按钮那一刻分析一下流程:- 响应前置:用户点击按钮后,客户端立即给予点击成功的响应,然后再向服务器发送用户点击操作的请求。-...

2020-11-18 01:01:13 260

原创 抖音和微博:两种不同的@人方案

基本上知名的app都有一个功能:@人。虽然功能很普遍,但以抖音和微博为主,这两家实现@人背后的产品逻辑是不一样的。今天我们就来阐述一下@人背后的产品逻辑。首先,我们先从操作上入手,介绍下两者的区别:抖音打开抖音,如果你手动输入了@xxx,你会发现xxx并没有高亮变成可点态,即使xxx这个用户是真的存在,而只有从@人列表选出的用户(@yyy)才会被高亮。且当你想删除@yyy中一个字符时你会发现并做不到,要删只能把"@yyy"全部删除,但@xxx是可以逐字删...

2020-11-18 00:58:35 1782

原创 Feed流产品的重用机制

作为一名产品经理,在体验产品时经常会遇到一些bug,这时开发会说能否录屏复现一下bug。以最常用的新闻feed流为例,同一个feed你之前发现有问题(比如UI错位、数据错乱)等,再刷回这个feed却没有问题了。 [步骤一]发现Feed 1有bug[步骤二]下滑看其他内容[步骤三]刷回Feed1,发现bug不见了这时场面就会很尴尬,开发觉得你找事,而你刚才确实发现有bug...出现上面问题,我们需要学习一下feed流...

2020-11-17 01:18:07 311 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除