Talk is cheap, show me the fucking code.
#### 概念 先进者先出,这就是典型的“队列”。(First In, First Out,FIFO)。 我们知道,栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队和出队。入队 `enqueue()`,让一个数据到队列尾部;出队 `dequeue()`,从队列头部取一个元素。
Java数组实现循环队列
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入或者删除运算。后进先出(Last In First Out)。 栈中的数据操作主要有push(压入)和pop(弹出)操作。 实际上,栈就可以用数组来实现,也可以用链表来实现。用数组实现的叫做顺序栈,用链表实现的叫做链式栈。 为了简单起见,我们的栈不支持泛型。
Flutter环境搭建、运行gallary项目
最近项目中用到了react,需要在父组件中调用子组件的某个方法,那么如何获取到子组件的实例呢? 这里使用了回调,简单实用,兼容低版本。
#### 归并排序(Merge Sort) 思路:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 所以说归并排序的核心思想是排序和合并两个有序数组,这个规程需要用递归来实现。 核心思想: * 将数组拆分为两个数组,然后对两个数组各自进行排序。 * 合并两个排好序的数组。
#### 核心思想 如果要排序数组中下标从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视图内容
HashMap 1.8 源码简读
1、LinkedHashMap继承自HashMap,HashMap具有的特性它都具有。 2、实际上,LinkedHashMap是通过双向链表和散列表这两种数据组合实现的。LinkedHashMap中的“Linked”实际上指的是双向链表,并非指“用链表法解决散列冲突”。 3、LinkedHashMap不仅支持按照插入顺序遍历数据,还支持按照访问顺序来遍历数据。通过设置`accessOrder`属性为true即可。也就是说它本身就是一个支持LRU缓存淘汰策略的缓存系统。
Java compiler error: constant string too long
并发编程使我们可以将程序分为多个分离的、独立运行的任务。通过使用多线程机制,这些独立人物(也被称为子任务)中的每一个都将由执行线程来驱动。 一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务。 在使用线程时,CPU将轮流给每个任务分配其占用时间。 线程的一大好处是可以使你从这个层次抽身出来,即diamante不必知道它是运行在具有一个还是多个CPU的机器上。
项目中有时会遇到需要我们获取最新版本号的逻辑,方便我们定位错误等。
Dart中的数字类型有两种,int和double。
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没有添加进环境变量中。
Dart是一个完全面向对象的语言,它的方法也是对象,对应的类型为Function。 这意味着方法也能被赋值给变量,或者当做参数传递给其他方法。
在尝试使用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了,需要另谋出路。