Talk is cheap, show me the fucking code.
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入或者删除运算。后进先出(Last In First Out)。 栈中的数据操作主要有push(压入)和pop(弹出)操作。 实际上,栈就可以用数组来实现,也可以用链表来实现。用数组实现的叫做顺序栈,用链表实现的叫做链式栈。 为了简单起见,我们的栈不支持泛型。
Flutter环境搭建、运行gallary项目
最近项目中用到了react,需要在父组件中调用子组件的某个方法,那么如何获取到子组件的实例呢? 这里使用了回调,简单实用,兼容低版本。
#### 核心思想 如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据为pivot(分区点)。 我们遍历p到r之间的数据,将小于pivot的放到左边,将大于pivot的放到右边,将pivot放到中间。经过这一步骤之后,数组p到r之间的数据就被分成了三个部分,前面p到q-1之间都是小于pivot的,中间是pivot,后面的q=1到r之间是大于pivot的。
二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。 这里我们实现最简单情况下的二分查找。升序排列的数组,无重复元素,查找其中是否包含单个元素。
Android中,如果能快速获取某个Activity的名称,我们就不用必须顺着代码逻辑,一步一步的去查找我们想查找的页面了,这就能极大的提高开发速度。
在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,我们可以在里面做一些Gradle文件的全局性的配置,也可以将比较私密的信息放在里面,防止泄露。 下面我们就来分析下IDE自动生成的gradle.properties文件,及其常见的用法。
Android Studio项目中的Gradle视图内容
1、LinkedHashMap继承自HashMap,HashMap具有的特性它都具有。 2、实际上,LinkedHashMap是通过双向链表和散列表这两种数据组合实现的。LinkedHashMap中的“Linked”实际上指的是双向链表,并非指“用链表法解决散列冲突”。 3、LinkedHashMap不仅支持按照插入顺序遍历数据,还支持按照访问顺序来遍历数据。通过设置`accessOrder`属性为true即可。也就是说它本身就是一个支持LRU缓存淘汰策略的缓存系统。
Java compiler error: constant string too long
并发编程使我们可以将程序分为多个分离的、独立运行的任务。通过使用多线程机制,这些独立人物(也被称为子任务)中的每一个都将由执行线程来驱动。 一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务。 在使用线程时,CPU将轮流给每个任务分配其占用时间。 线程的一大好处是可以使你从这个层次抽身出来,即diamante不必知道它是运行在具有一个还是多个CPU的机器上。
项目中有时会遇到需要我们获取最新版本号的逻辑,方便我们定位错误等。
Dart中,Runes是指UTF-32定义的Unicode字符串。 Unicode使用数字表示世界上所有的字母、数字和符号。因为Dart中的String是一系列UTF-16字节单元,而在String中想要表示32位的Unicode值,则需要特殊的语法。 一般我们使用 `\uXXXX` 这种形式表示一个Unicode码,`XXXX`表示4个十六进制值。例如,字符(♥)的Unicode字符是`\u2665`。 当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(😆)是`\u{1f600}`。 String类中有几个属性你可以用来获取`rune`信息。
在学习dart语言时,当你遇到`zsh: command not found: dart`这个错误时,这说明你的dart没有添加进环境变量中。
在尝试使用github搭建个人主页的过程中,遇到了一些问题,这里记录下。 在安装ruby、gem之后,通过gem安装jekyll后,执行`jekyll -v`命令时遇到`zsh: command not found: jekyll`错误,很明显这个是环境变量的问题。 这里我的终端使用的zsh,不是mac自带的。 最后通过gem重新安装jekyll,然后根据终端中的提示来配置环境变量。
Android项目中,我们一般要设置gradle插件版本和gradle版本。 项目根目录下的build.gradle文件中,通过classpath可以指定gradle插件的版本。
Dart中的类——初始化列表、命名构造器、factory构造器、常量构造器、构造器私有化、get和set方法、枚举
flutter项目的开发,一般来说都是与原生开发混合进行的,单纯的flutter开发局限性很大,需要与原生进行配合。
项目中使用到了RecyclerView#smoothScrollToPosition(0)方法让Recyclerview滚动到顶部,同时给Recyclerview设置了监听器RecyclerView.OnScrollListener。
Dart中Class、mixin、interface三者间关系及异同
开发过程中,json是必不可少的基础技能之一。这里记录下,在Dart语言中,如何将json解析成实例对象,以及如何将实例对象转化成json字符串。
No toolchains found in the NDK toolchains错误解析与解决。
flutter中实现仿Android端的onResume和onPause方法
dart中箭头表达式与js中箭头表达式对比
平时我们在开发flutter过程中,在执行`flutter packages get`命令之后,如果运气不好的,命令没有执行成功的话,我们就会遇到这个错误提示: ``` Waiting for another flutter command to release the startup lock... ```
众所周知,Dart是一门面向对象的语言,比Java更纯粹,Dart中的方法也是对象,也有类型Function。这意味着方法可以被分配给对象,也可以当做参数传递给其他方法。
flutter端请求网络时,调用的是宿主App的网络请求。 flutter通过消息通道发送一个消息,然后`await`等待消息返回,最终宿主app会调用`reply.reply(obj)`方法返回数据。如果在这个过程中,flutter页面关闭,就会出现如下异常,类似Android中的内存泄漏。
Android Studio中如何清理gradle缓存
Dart中的条件表达式有两种形式,用来替换简单的`if-else`语句。
级联表达式(..)允许你在同一个对象上连续使用操作符。 除了方法调用之外,你还可以获取同一个对象上的成员变量。这样做通常省去了创建临时变量的步骤,同时允许你写出更流畅的代码。 严格来说,级联表达式的两个点(”..“)的语法并不能算作操作符,它仅仅是Dart语法的一部分。
Android常见的异步转同步的方式是通过Callback + Handler的方式来完成,常见的例子是在子线程请求网络,成功后调用Callback,然后通过Handler发送消息给主线程,让子线程更新UI。当然了,实际开发还有好多方式可以实现这种操作。
Android Studio中我们可以通过菜单栏的`Android Studio --> preferences --> plugins`来查看我们安装的插件。这里介绍下插件的实际安装位置。
linux下常用命令—个人总结
在学习Picasso源码的过程中,发现了Picasso对象的初始化不需要传入上下文对象了
less中使用calc计算高度注意事项
我们这里说的View的测量、布局和绘制,实质上是针对ViewGroup的,简单起见就不区分View和ViewGroup。View的测量、布局和绘制是包含在ViewGroup流程中的。
View的测量、布局和绘制过程中,到底是先测量(布局、绘制)父View,还是先测量子View,这篇文章会从源码角度给出答案。
内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this访问外部类的成员。 1、编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象(this)的引用; 2、编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为内部类中添加的成员变量赋值; 3、在调用内部类的构造函数初始化内部类对象时,会默认传入外部类的引用。
kotlin查看编译后的Java代码
在终端中输入adb命令时,会提示 command not found ,这是是因为mac电脑下没有配置Android环境变量或者环境变量配置错误。
Eclipse中经常会遇到中文乱码的问题,一般都是编码格式不一致,eclipse默认的编码格式是GBK,这里推荐统一使用UTF-8。
这里以照相机权限为例说明问题。实际开发过程中遇到了不少的坑。
在将enum和switch case结合使用的过程中,遇到了这个错误:“An enum switch case label must be the unqualified name of an enumeration constant”。
项目中某些页面中的分组数据的顶部需要悬停,并且悬停的View要与ItemView中同样布局的View进行操作同步,也就是相互同步。大家都知道,Android中有"The specified child already has a parent. You must call removeView() on the child's parent first."这个异常,意味着同一个View对象不能有两个Parent。我们就不能简单粗暴的将同一个View对象添加进两个parent了,需要另谋出路。
写在前面:本文的目的是想将Handler、Looper和Thread之间绑定的原理讲明白,如果没讲明白,也希望能给关于Handler的学习留个印象。 Android中的多线程间交互离不开Handler,开发中最常见的操作是在子线程中执行耗时操作,在主线程中更新UI,这其中就涉及到了Handler的线程切换操作。
如何通过Android Studio查看不同版本的Android源码
Android应用的开发离不开四大组件(Activity,Service,BroadcastReceiver,ContentProvider),而这四大组件所涉及的通信底层都是依赖于Binder IPC机制的。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅如此,整个Android系统架构中,大量采用了Binder机制作为IPC方案,当然也存在部分其它的IPC方式,比如Zygote通信便是采用Socket。 概念:Binder是Android中的一种IPC方式,提供远程过程调用(RFC)功能。
需求:ImageView显示的图片,上方的两个角是圆角,下方的两个角是直角。 ![需求图](https://img-blog.csdn.net/20180125151146126?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjYyODc0MzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
手把手带你用viewpager实现gallary效果,外加无限循环,自动轮播 主要功能: ①Gallary样式 ②无限轮播 ③自动轮播和手势操作间冲突解决
刚做完推送集成方案,记录下坑。 这里记录的特性和使用时针对写blog时采用的sdk的,具体使用流程和限制还请参考官方给出的sdk. #### 1、推送规则 小米手机用小米推送; 华为手机用华为推送; 其他手机用友盟推送。