- 博客(350)
- 资源 (60)
- 收藏
- 关注
原创 iOS 10 is the maximum deployment target for 32-bit targets
问题近期创建一个新项目引入了一些库,使用脚本打包lib的时候,发生了类似如下的报错:iOS 10 is the maximum deployment target for 32-bit targetsnormal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler检查了半天,发现是ios SDK版本的问题,新项目默...
2019-06-22 10:37:31 2531
原创 ios lib运行找不到.h文件 “.h file not found”
问题在运行lib target项目的时候有一些.h文件会找不到。但是在正常taget中是没有问题的。解决方案在Stack Overflow上查了解决方案是在lib的target的Build Setting中搜索“Header Search Path”配置。于是笔者配置了如下:(xxx表示库的名字)但是在配置之后还是会有问题,查找了半天才找到问题所在。我们可以对照下再正常项目的targe...
2019-06-22 10:31:16 7446
原创 游戏对战匹配逻辑小结
前言近期接触了到了游戏后台的匹配逻辑,写此文作记录,也给后来者一些参考。场景与需求玩家去匹配战斗力与自己类似的其他玩家。如果在一定区间找不到对手,那就扩展区间。连续匹配两次,不能匹配到相同的玩家。如果已经战斗过的玩家,在一定时间内不能再被匹配到。(此处假设5分钟内不能再被匹配到,5分钟之后需要又可以被匹配到)数据结构根据上面几个需求,得出以下初步结论:至少要有两个List,一...
2019-06-15 18:45:43 4417 1
原创 netty学习小结
前言近期碰到网络相关的问题,准备使用netty,于是学习了一番,本文主要记录学习中的一些要点,至于诸多细节的学习,笔者推荐《Netty实战》和“简书闪电侠”的博客。本文参考:《netty实战》简书闪电侠的博客netty简介Netty是一个NIO客户端服务器框架,目前已经有苹果、Facebook等诸多大厂在使用。主要特点:API简单,文档丰富,社区活跃。使用NIO,能用较少的...
2019-06-15 17:47:34 466
原创 SkipList详解
本文参考:《大数据日知录》概念SkipList是一种用来代替平衡树的数据结构。虽然在最坏的情况下SkipList的效率要低于平衡树,但是大多数情况下效率仍然非常高,其插入、删除、查找的时间复杂度都是O(log(N))。除了高效外,其实现和维护非常简单也是一大优势。SkipList的使用还是比较广泛的,比如在LevelDB中的MemTable就是使用SkipList实现的,Redis的...
2019-05-19 17:45:28 2455
原创 bitmap算法
本文参考:Bitmap 算法解释与应用概念BitMap 就是用一个 bit 位来标记某个key对应的 value。由于采用bit为单位来存储数据,因此在可以大大的节省存储空间。使用场景bitmap排序假设我们要对5个不重复的数(4,7,2,5,3)排序。确定最大值是7,数值范围是0~7,共8个数,需要8bit,即1字节。此时8个字节与集合中的数的对应关系为:00010000 ...
2019-05-19 16:15:30 957
原创 Raft协议详解
本文参考:《大数据日知录》Raft协议详解简介Raft是一个一致性算法,它用于在分布式场景中保证多个副本之间的一致性。对于”分布式场景“和”一致性“不是很理解的读者可以先看下笔者前一篇文章:CAP简介在Raft中,实现多个副本的一致性的方式是,让多个副本之间的log数据达成一致。基本概念集群中的服务器有三个状态:Leader、Follower和Candidate。每个状态...
2019-05-19 15:25:33 1509
转载 Redis RDB和AOF
原文地址:Redis持久化RDB和AOF优缺点是什么?Redis是一种高级key-value数据库。数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。Redis为了保证效率,数据缓存在内存中,Redis 会周期性的把更新的数据写入磁...
2019-05-19 09:37:21 303
原创 由LevelDB理解 LSM-Tree
本文参考《大数据日知录》LSM Tree 学习笔记概念LSM-Tree(Log-structured Merge tree)是一种数据结构,它的本质是将大量的随机写操作转换成批量的序列写。LSM-Tree可以极大提升磁盘数据写入的速度,所以LSM-Tree非常适合对写操作效率有高要求的应用场景。为何“随机写”改成“序列写”可以提高磁盘写入速度磁盘每次读写数据,不管你读写的数据有...
2019-05-11 15:18:42 2968
原创 二段式提交协议和三段式提交协议(2PC和3PC)
参考《大数据日知录》2PC与3PC场景这两者是常用解决分布式事物的方式,保证在分布式事物中要么都提交事物,要么都取消事物。二段式提交(2PC)主要有两个阶段:准备阶段提交阶段主要步骤如下:4. 步骤一,协调者询问参与者是否可以提交。5. 步骤二,参与者告知提交者可以提交。6. 步骤三,协调者让参与者发送提交请求。7. 步骤四,参与者提交完毕后告知协调者已经提交完毕。...
2019-04-27 15:39:37 2120
原创 布隆过滤器简介
适用场景检测某个元素是否是巨量数据集合中的成员。一般操作检测某个元素是否是一个数据集合中的成员,我们第一时间想到的就是使用哈希。但是仅仅使用哈希是不够的,当数据非常多的时候,就会有这样的问题:如果只使用一个哈希容器,多个数经过哈希计算后会得到一样的值,如果要查找到具体的某个值的话,单个节点必须存储原来的值。那么如果数据非常多,比如有10GB,那么这个哈希容器也不会小于10GB。布隆...
2019-04-27 11:14:07 483
原创 ios webview iphoneX 刘海屏适配
参考文章:https://ayogo.com/blog/ios11-viewport/问题webview 在iphoneX中的一些表现会不满足业务预期,如下广告,头部和底部都会留有空白,而业务方真正期望是填满整个屏幕。期望效果如下:解决方式H5解决(优先使用)在需要适配iphone X的头部添加一行代码,这也是苹果官方提供的适配iphoneX的方式。<meta na...
2019-04-19 11:04:21 6128 2
原创 一个例子理解依赖注入
前言之前已经记录过一篇文章解释依赖注入,现在看来有点过于理论化,于是写了一个demo解释下什么是依赖注入,也是在实际开发中依赖注入的使用场景。对依赖注入还完全不理解的可以看一下上一篇文章:依赖注入 简介场景假设目前你正在开发公司的一个框架,为了保证线上代码的安全,你需要引入你们公司的“线上开关”的模块,这样如果发现你的框架有问题,可以及时用线上开关关闭部分功能,而不至于在下个版本发布前...
2019-04-13 15:00:03 1801
原创 CAP简介
参考《大数据日知录》概念CAP:Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容忍性)CAP最初是由Eric Brewer提出,他证明了,在分布式数据系统中,CAP三要素不可能兼得,同时只能满足其中的两种。单条解析Consistency(一致性)在分布式系统中,同一数据多副本的情况下,对于数据的操作能保证不会出现多...
2019-04-13 11:33:51 3497
原创 coids+pika集群 问题小记
概要近期搭建coids+pika集群,碰到一些小坑,此文记录下流程以及碰到的问题。pika github:https://github.com/Qihoo360/pikacodis github:https://github.com/CodisLabs/codis碰到问题的时候第一时间除了google之外,其实也可以去官方github的issue中搜索下,因为一般流行框架的坑都会有人先...
2019-04-03 20:57:03 1727
原创 由codis架构一步步理解分布式数据库集群
前言近期在搭建codis,其中涉及的知识点较多,可以说每个控件都有其作用。而很多知识点在分布式集群的方向上是共通的。于是,在大概梳理完知识点后,做此文记载该块内容,也供后面入坑的新手参考。codis github链接:https://github.com/CodisLabs/codis主从服务器和sentinel我们要搭建一个数据库服务器,最简单的就是直接一台服务器部署数据库的功能,...
2019-03-30 17:10:15 1040 3
原创 哈希分片总结
主要参考:《大数据日知录》https://zhuanlan.zhihu.com/p/34985026什么是哈希分片后台随着数据规约的越来越大,单机明显无法存储着庞大的数据量,只能依靠大规模集群在对数据进行存储和处理,所以系统的可扩展性也成为了很重要的一个点。目前主流的大数据存储于计算系统通常采用横向扩展的方式支持系统的可扩展性,即通过增加机器数量来获得水平扩展能力。与此对应,对于待存...
2019-03-23 16:22:09 3487
原创 MVC、MVP、MVVM小记
本文参考https://draveness.me/mvx前提概要MVC、MVP、MVVM是三个最常见的软件架构模式中,平时与其他人的交流中也经常涉及到。细想的时候发现自己对这些其实也只是略知一二,并未真正的了解总结过,于是作此文。此文对个模式概念的描述不多,主要是用例子来说明。MVC(Model-View-Controller)Model: 数据结构和数据结构相关的类,比如说网...
2019-03-09 17:33:31 640
原创 git rebase 和merge 区分
本文参考https://backlog.com/git-tutorial/cn/stepup/stepup1_4.htmlrebase和merge区分相同点两者都可以合并代码。不同点比如现在在某个子分支执行git rebase(merge) master操作。merge:将在子分支的所有提交记录成一次commit,保留在记录中。(下图的E即为该记录)rebase:不会保留com...
2019-03-09 11:15:43 1236
原创 什么是AOP(面向切片编程)
本文参考https://juejin.im/post/591d8c8ba22b9d00585007ddAOP wiki 解释In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separatio...
2019-03-02 16:26:53 3457
转载 base64原理简介
原文地址:http://www.ruanyifeng.com/blog/2008/06/base64.htmlhttp://blog.xiayf.cn/2016/01/24/base64-encoding/转化步骤:将每三个字节作为一组,一共是24个二进制位。将这24个二进制位分为四组,每个组有6个二进制位。在每组前面加两个00,扩展成32个二进制位,即四个字节。(加00的作用是...
2019-02-16 10:08:54 513
原创 Java Synchronized 锁升级简介
锁升级顺序偏向锁轻量级锁自旋锁重量级锁偏向锁如果一个线程获得了锁,再次请求的时候就不需要再去获取锁。如果发现有其他线程来获取这个锁,就升级为轻量级锁。理论基础:在大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,因此为了减少同一线程获取锁的代价而引入偏向锁。轻量级锁通过使用CAS来获取锁,如果CAS失败就升级为自旋锁。相关链接:JAVA轻量级锁简介理...
2019-01-26 10:59:59 934
原创 apache kafka 简介
概述Apache Kafka 是分布式发布-订阅消息系统。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。kafka合适也是最常见的使用场景就是日志投递。即适合对可靠性、持久性、吞吐量要求高的场景。图解下图摘自wiki:一般使用中会接触到的主要是以下几个名词:Producer: 消息的投递者Consumer: 消息的消费者Topic: Producer和Cons...
2019-01-12 16:32:47 471
转载 依赖注入 简介
原文地址: https://www.jianshu.com/p/bf0c9f23381a依赖注入简介依赖注入是一个很常用的词。Java新手常会写出如下的代码,直接在写一个类的时候让它自己初始化自己。但是这不是一个好办法。一个类的状态应该由创建它的类决定,不能由自己决定自己。因此更好的办法是交给构造方法来初始化。public class User { private long id...
2019-01-12 14:41:22 762
原创 Java 模块化(gradle)
组件化什么是组件化,直接看下面两张图。上面是非组件化的项目,下面是组件化的项目。非组件化的问题如果项目本身有多个互相不影响的模块,甚至有多人分开负责各个模块的开发时,非组件化项目的弊端就会暴露出来,主要是有下面几个:1、依赖难以管理,不同的模块依赖不同的库,甚至是同一个库的不同版本。2、各个模块单独打包麻烦。3、增加额外开发成本,开发本身可能只需要开发一个模块,但是由于代码写在一...
2019-01-12 11:45:01 2942 2
原创 《关键对话》小记-控制情绪与陈述观点
控制情绪要点不管你多么振振有词的职责别人,实际上其他人是无法让你陷入某种情绪的,是你制造了自己的情绪,是你让自己感到害怕、烦恼或者气氛。让你产生情绪的只有能而且永远是你自己。产生负面情绪后你只有两个选择,要么控制塔,要么被它控制。留意三种“小聪明”一、受害者想法——“这可不是我的错”此类想法基本上都是这个模式:对方是邪恶的,错误的,愚蠢的,自己是善良的、正确的、聪明的。大多数关键...
2018-12-22 20:23:01 1063
原创 负载均衡、Docker、服务发现科普
本文参照:https://zhuanlan.zhihu.com/p/32841479https://www.jianshu.com/p/9826d866080ahttp://www.ruanyifeng.com/blog/2018/02/docker-tutorial.htmlhttps://zhuanlan.zhihu.com/p/32027014负载均衡wiki解释:负载均...
2018-12-15 11:21:14 816
原创 《关键对话》小记-确定目标与保证安全
确定目标例子公司里,你参与的一个比较重要的项目出了差错,实际上有三四个参与的人需要为此负责,包括你。问题已经出现了,于是大家一起开会讨论解决方案。开会时,老板从言语中表示处“你一个人应该付大部分责任”的意思,而且其他人也对自己在该项目中犯的错闭口不提。在开会时,你有发言空间,你会如何说?错误的三种方式1、战胜对方例子表现:直接和老板争论这次问题你不应该负大部分责任,其他人还在...
2018-12-09 21:57:22 874 2
原创 RNN和CNN(循环神经网络和卷积神经网络)
概要本文科普性质偏多,主要讲一下神经网络中一些常见的概念,如果是完全不懂的小白也可以阅读。本文参考:一个例子理解NN(神经网络) 模型现在想要计算一个人的智商,目前影响智商的因素有身高、体重、家庭背景三个,三者的影响权重也不同,最终能通过三者和权重计算出一个人的智商。这些所有的因素结合到一起就可以称为是神经网络,如下图:由此可以引申出神经网络的三个概念:输入层(Input lay...
2018-12-01 14:33:32 11234 9
原创 从Android图形架构上理解什么是SurfaceView
概念SurfaceView的内容可以在单独的线程和单独的进程中渲染。使用场景拿斗鱼APP举个例子,如下图:视频肯定是用的SurfaceView,这样就可以单独线程或者进程渲染。如果不用单独渲染会有什么问题?可以看到下面会有一个聊天框,在用户特别多的时候,下面的聊天框肯定渲染非常频繁,而视频也需要及时渲染,如果两者在同一个线程,那么频繁渲染的聊天框很可能会影响到视频的渲染。这样用户只...
2018-11-24 16:46:50 604
原创 HTTP与HTTPS总结
前言很久之前在小组做过HTTPS相关的分享,后续这方面的知识也是用到比较多,总是会去翻以前的文档,于是便打算将之前的分享总结成博客,当做记录。大概内容如下:HTTP通信过程HTTPS(包括对称和非对称加密)中间人攻击HTTP各个版本改动(包括长连接和多路复用)HTTP通信过程首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。建立连接后,客户机发送一...
2018-11-24 11:21:23 2986
原创 Android Binder简介
参考文章:https://blog.csdn.net/luoshengyang/article/details/6618363https://blog.csdn.net/universus/article/details/6211589基本概念Binder:是Android进程间通信的一种机制,主要包括四个组件,内核空间的一个组件Binder驱动和用户空间的三个组件Client、Ser...
2018-11-17 18:00:30 764
转载 Java NIO简介
原文地址:https://zhuanlan.zhihu.com/p/27419141简介个人理解,nio 最关键的地方是实现了io的多路复用问题。引入多路复用的原因实际上,在服务端与客户端一对一通信的时候,同步阻塞式地读写并不会有太大的问题,最典型的就是两个对等机器之间建立了TCP连接,并且通过TCP连接来发送一个大文件,有大量的数据传输。在这种场景中,阻塞式的写法简单高效。但是,...
2018-11-17 11:12:50 674
原创 Android 图形架构简介
本文参考:https://source.android.com/devices/graphics/architecture流程一、无论开发者使用什么渲染 API,一切内容都会渲染到Surface。二、Surface把图像流缓存到buffer queue三、SurfaceFlinger 从多个buffer queue中去获取图像流执行合并操作四、 Hardware Composer 去...
2018-11-10 14:26:57 1352
原创 一篇文章弄懂cookie、session和token
概念cookiecookie存储在客户端,HTTP是无状态的,HTTP每次发出的时候会附上该域名下的cookie,从而可以给HTTP附上状态,最常见的就是登录态。session和tokensession和token算是一类的,他们是两种不同的服务器的验证方式。通俗来说,cookie会存一个value在客户端本地,然后将value附到HTTP上发给服务器,那么服务器是怎么通过这个value...
2018-11-05 19:33:13 3988 4
转载 加速度计、陀螺仪和姿态角
原文地址https://blog.csdn.net/yuzhongchun/article/details/22749521https://www.cnblogs.com/xiaoxiaoqingyi/p/6932008.html加速度计用来测量x,y,z三个轴上的加速度。应用1、微信摇一摇陀螺仪用来测量x,y,z三个轴转动的角速度,右手定则。应用1、飞行、体育类游戏...
2018-10-30 16:18:38 10060
原创 JAVA轻量级锁简介
概念在某些场景下,去获取对象锁的时候使用CAS的方式,而不是阻塞。轻量级锁能够提升程序同步性能的一句是“对于绝大部分的锁,在整个同步周期内都是不存在竞争的”,这是一个经验数据。在 Java Object头文件中,有一个“Mark Word”对象,它是实现轻量级锁的关键。Mark Word的数据结构非固定,根据不同的状态会有不同的结构。比如在32位的HotSpot虚拟机中对象未被锁定的状态...
2018-10-20 17:39:47 2748 2
原创 Java Timer源码解析(定时器源码解析)
Timer概述Timer顾名思义就是定时器,用于处理一些需要延时处理的任务,延时时间可能是1s,也可能是5天。一般使用方式如下: TimerTask task = new TimerTask() { @Override public void run() { Log.d("test", "timer...
2018-10-20 14:29:18 1321
原创 Socket 粘包和分包问题
概念Socket通信时会对发送的字节数据进行分包和粘包处理,属于一种Socket内部的优化机制。粘包:当发送的字节数据包比较小且频繁发送时,Socket内部会将字节数据进行粘包处理,既将频繁发送的小字节数据打包成 一个整包进行发送,降低内存的消耗。分包:当发送的字节数据包比较大时,Socket内部会将发送的字节数据进行分包处理,降低内存和性能的消耗。例子解释当前发送方发送了两个包,...
2018-10-20 11:08:42 9257 1
原创 linux中断 简介
中断 概念中断是一种可以使CPU和硬件设备进行通信的技术。例如,当我们在敲击键盘时,键盘控制器(控制键盘的硬件设备)会发送一个中断,通知操作系统有键按下。从本质上说,中断是一种特殊的信号,由硬件设备向CPU发送。当CPU接收到中断信号后,就会马上通知操作系统此信号的到来,然后由操作系统负责处理这些新到来的数据。过程如上图:1、设备产生中断2、电信号发送给中断控制器3、判断中断是否被屏...
2018-10-07 22:41:21 703
onMeasure简单方法 完美解决ListView与ScollView!
2016-05-22
残缺棋盘 android实现颜色填充
2016-05-17
实验四 常微分方程的数值解
2016-05-11
实验三 数值积分(android)
2016-05-08
android图片轮播效果,RollViewPager的简单使用
2016-05-06
android RecyclerView布局
2016-04-22
实验二 插值方法(android)
2016-04-22
android RecyclerView布局真的只是那么简单
2016-04-18
android RecyclerView布局真的只是那么简单!
2016-04-18
实验一 直接法解线性方程组(android)
2016-04-14
android 自定义控件(底部icon点击效果)
2016-04-08
android ContentResolver的使用(获取和修改联系人信息demo)
2016-04-07
android canvas\paint\path简单使用(自定义view必学)
2016-04-01
android 滑动删除的listview(自定义view)
2016-03-29
android Fragment与Activity交互,互相发数据(附图详解)
2016-03-26
android Fragment与Activity互相发数据(附图详解)
2016-03-25
android Activity的启动模式 作用简析+demo详解
2016-03-19
学生宿舍管理系统 学生宿舍管理系统
2016-03-04
Android单元测试-对Activity的测试 [
2017-08-15
Android单元测试-对Activity的测试
2017-08-14
ListView异步创建View
2017-07-14
FragmentTransaction使用全解
2017-03-03
用Scroller完成一个简单的ViewPager
2017-02-23
完全理解android事件分发机制
2017-01-12
ASP.NET 电影票信息的增删查改
2016-12-14
ASP.NET 个人信息注册页面,并跳转显示
2016-11-23
android socket聊天室——也不仅仅是聊天室
2016-11-21
android 实现FlowLayout 流线布局(自定义ViewGroup)
2016-10-18
为RecyclerView添加分页加载(上拉加载更多)功能
2016-10-11
为RecyclerView添加FootView和HeadView
2016-10-11
学生信息管理系统2222
2016-09-23
最简易的网络框架封装(新手可看)
2016-09-07
给自定义View添加xml属性
2016-08-04
快速入门android AIDL(开启多进程并进行通信)
2016-06-10
RecyclerView超简单demo(局部更新取代ListView)
2016-06-08
实验五 迭代法解线性方程组与非线性方程(android)1
2016-05-25
实验五 迭代法解线性方程组与非线性方程(android)
2016-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人