MG--Swift3.0之仿写酷狗音乐的索引
首先来看看酷狗的截图效果系统提供的API:@available(iOS3.0,*)openfuncreloadSectionIndexTitles()//reloadstheindexbar.//重新刷新右边文字@available(iOS6.0,*)openvarsectionIndexColor:UIColor?//colorusedfortextofthesectionindex//右边文字
实际项目需求之:使用正则全局替换单位
实际需求:用rem插件替代scss写的方法。需要吧项目中所有 px2rem()替换为px。例:px2rem(30) 替换结果:30px。匹配要替换的字符串,转义符号 px2rem(d+) 用捕获符号 (capturingparentheses)去捕获匹配项中需要保留的部分 px2rem((d+)) 占位符获取保留部分+新的单位 $1便是捕
iOS 端实现1对1音视频实时通话
前言之前,我已经写过Android端实现1对1音视频实时通话的文章。在那篇文章中,我向大家介绍了在Android端是如何使用WebRTC进行音视频通话的。今天,我们再来看看iOS端1对1音视频实时通话的具体实现。iOS端的实现逻辑与Android端基本相同,最大的区别可能是语言方面的差异啦!所以,下面我基本上还是按照介绍Android端一样的过程来介绍iOS端的实现。具体步骤如下:权限申请引入We
L2-001 紧急救援(dijkstra)
题目:作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的
SparseArray 稀疏数组解析
前言安卓提供了一个名为SparseArray的数据结构,用来替代小型的以int为key的HashMap,SparseArray牺牲了一些运行性能,用以换取内存节省。本文将针对SparseArray源码进行相关剖析。底层实现SparseArray的底层实现为数组,在SparseArray中定义了下面两个数据结构,分别用来记录Key和Value,可以发现由于这个数据结构要求键必须是int,因此稀疏数组
一个单例模式中volatile关键字引发的思考
关于单例模式单例模式相信大家都不陌生,学习设计模式的时候,往往第一个要学习的就是单例模式。单例模式在Java中有许多实现,最常见的是“双重锁检测”、“静态内部类”以及“枚举”的实现方式。《EffectiveJava》推荐使用枚举的方式。但今天要讨论是使用“双重锁检测”实现单例的时候,关于volatile关键字引发的一些探索和思考。限于篇幅原因,本文假设你已经了解以下知识:Java内存模型volat
Spring Cloud构建微服务架构:服务网关(基础)【Dalsto
通过之前几篇SpringCloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了。比如下图所示:alt我们使用SpringCloudNetflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;通过SpringCloudConfig实现了应用多环境的外部化配置以及版本管理。为了使得服务集群更为健壮,使用
nginx环境搭建(1)
获取全套nginx教程,请访问瓦力博客之前小菜有自己从网上找的教程,零散的配过一些nginx,最近赶上双11没把持住就买了nginx教程。系统性的学习nginx,将nginx学习过程记录下来。由于小菜条件有限,小菜用的硬件环境是阿里云服务器,1核,2GB内存。操作系统是centos7.4一.调试环境四项确认*1.确认系统网络,保证能够访问公网*2.确认yum可用*3.确认关闭iptables规则*
SpringBoot 快速整合Mybatis(去XML化+注解进阶)
一.基础注解MyBatis主要提供了以下CRUD注解:@Select@Insert@Update@Delete增删改查占据了绝大部分的业务操作,掌握这些基础注解的使用还是很有必要的,例如下面这段代码无需XML即可完成数据查询:@Mapperpublic interface UserMapper { @Select("select * from t_user") List list();}使
计算机科学速成课-Crash Course Computer Scie
现在的开发者需要具备的,不仅仅是技能树,而是技能森林。(推特@qing_wang)最近偶然看到这个课,我觉得还不错,可以扫盲,B站就有,然后我总结了一些要点,供大家参考可爱吗?TimelineSomenotes因为字幕组公开字幕了,所以我就记了一部分笔记。LogicGatesXORexampleBinary二进制中,一个1或0叫一"位bit".1字节byte=8位Mega是百万字节(MB),Gig
十分钟快速掌握 MarkDown
markdown导语Markdown是一种轻量级的「标记语言」,它的优点很多,目前被越来越多的写作爱好者,撰稿者广泛使用。看到这里请不要被「标记」、「语言」所迷惑,Markdown的语法十分简单。常用的标记符号也不超过十个,这种相对于更为复杂的HTML标记语言来说,Markdown可谓是十分轻量的,学习成本也不需要太多,且一旦熟悉这种语法规则,会有一劳永逸的效果。使用Markdown的优点专注你的
Spring Boot + Mybatis 实现动态数据源
动态数据源在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据源方案进行解决。接下来,我们就来讲解如何实现动态数据源,以及在过程中剖析动态数据源背后的实现原理。实现案例本教程案例基于SpringBoot+Mybatis+MySQL实现。数据库设计首先需要安装
Andoid Fragment传值方式遇到的bug
一般使用Fragment的时候,fragment都是新创建的时候传值,又或者是第一次创建之后就不需要再有传值的操作了,但是最近在处理fragment传参时遇到了fragment反复传参的bug,Fragment 来回切换用的是hide()和show()方法,第一次传值AFragment用了setArguments()方法;切换到Bfragment的时候,B向A传值重新调用setArgument
再和“面向对象”谈恋爱 - super
在上一篇文章里介绍了继承,那其中说过一个很关键的东西想要继承子类里里必需先调用一个super方法。而super的作用绝对是价值连城!同时super的作用还有多种,并且跟你的使用环境有关系。1、当作函数使用super被当作函数使用,这种情况是最普遍的,上一篇文章里已经使用过。它有以下几种作用:super作为函数调用时,代表父类的构造函数调用super后,this会被改成子类只能用在构造函数里,用在其
仿曾经的掌阅书架多种布局切换展示实现方案探索
!个人探索整理当我们遇到需要用一个按钮控制多种View切换,怎么办?我们可以这样想一下:问题1:是否可以用变量记录当前展示的是哪个View,通过对变量的操作完成View的切换呢?问题2:控制类不希望知道子View业务细节,是否可以用一个对象来代表这些子View,通过操作该对象实现对子View的操作。按上面俩个问题扩展一下解决思路:1.分别指定子View对应的记录类型2.提供全局变量记录最终显示的子
Android发布开源项目注意事项
1.合理配置 .gitignore 文件配置 .gitignore 可以排除一些非必要文件和保护保密信息,下面是在项目根目录下 .gitignore 的配置:12345678.gradle/local.properties/gradle.properties/build*.log*.apk*.ap_/*/build/这里介绍下一些参数的意义:/local.properties:这个文件里默认写的有
js作用域链
理解作用域是什么?在大多数语言中都是用花括号{}来形成一个作用域,俗称块作用域。但是在JavaScript中{}并没有带来块作用域,JavaScript的作用域是靠函数来形成的,也就是说一个函数内定义的变量函数外不可以访问。作用域链定义在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScrip
自己写的一个jquery计算器
test*{margin:0;padding:0;}.clearfix:after{content:".";display:block;height:0px;clear:both;visibility:hidden;}*html.clearfix{height:1%;}body{font-size:12px;font-family:arial;text-align:center;}#calcul
钉钉JSAPI前端鉴权
钉钉二次开发分为如下表所示三种类型的开发,只有企业内部应用才需要对JSAPI鉴权。类型开发方式JSAPI鉴权应用场景第三方企业应用E应用开发不需要用于发布到钉钉应用市场,供广大用户下载,应用可选收费或免费,需要收取保证金,并进行应用审核企业内部应用H5开发,8月中旬也开始支持E应用开发需要只能企业内部应用,不能发布到钉钉市场第三方个人应用E应用开发需要应用与企业不挂钩,服务于个人先来看一下钉钉官网
文件创建和删除 接受数据
Scannerscan=newScanner(System.in);//这是输入语句Stringa=scan.nextLine();//他可以接受中间带空格的字符串,但是next()不可以。if(a.equals("1")){};//注意此时的必须写equals不能写==。==只能比较内置数据类型。equals可以比较引用数据类型。 内置数据类型都是小写的。//下面就是java的创建和删除。注意递