白驹过隙

Android之视图架构

LayoutInflater: https://blog.csdn.net/guolin_blog/article/details/121889703 LayoutInflater 将一个xml布局转换成一个View对象的过程主要包含两步: 通过解析器来将xml文件中的内容解析出来。 使用反射将解析出来的元素创建成View对象。 public View inflate(int resource, @Nullable ViewGroup root, boolean attachToRoot) { … } 如果我们将inflate()方法的第三个参数传入true,那么就会直接将inflate出来的布局添加到父布局当中。这样后面再次addView的时候就会发现它已经有一个父布局了,从而抛出RuntimeException的崩溃信息。

图解大顶堆的构建、排序过程

一、什么是堆 堆是一种非线性结构,可以把堆看作一棵二叉树,也可以看作一个数组,即:堆就是利用完全二叉树的结构来维护的一维数组。 堆可以分为大顶堆和小顶堆。 大顶堆:每个结点的值都大于或等于其左右孩子结点的值。 小顶堆:每个结点的值都小于或等于其左右孩子结点的值。 如果是排序,求升序用大顶堆,求降序用小顶堆。 一般我们说 topK 问题,就可以用大顶堆或小顶堆来实现, 最大的 K 个:小顶堆 最小的 K 个:大顶堆 二、大顶堆的构建过程 大顶堆的构建过程就是从最后一个非叶子结点开始从下往上调整。 最后一个非叶子节点怎么找?这里我们用数组表示待排序序列,则最后一个非叶子结点的位置是:数组长度/2-1。假如数组长度为9,则最后一个非叶子结点位置是 9/2-1=3。 比较当前结点的值和左子树的值,如果当前节点小于左子树的值,就交换当前节点和左子树; 交换完后要检查左子树是否满足大顶堆的性质,不满足则重新调整子树结构; 再比较当前结点的值和右子树的值,如果当前节点小于右子树的值,就交换当前节点和右子树; 交换完后要检查右子树是否满足大顶堆的性质,不满足则重新调整子树结构; 无需交换调整的时候,则大顶堆构建完成。 画个图理解下,以 [3, 7, 16, 10, 21, 23] 为例: 代码如下: <?php /** * 构建大顶堆 * 大顶堆的性质:每个结点的值都大于或等于其左右子结点的值。 */ function buildBigHeap(&$arr, $len) { for ($i = floor($len/2) – 1; $i >= 0; $i–) { //根节点小于左子树 if […]

算法运行时间分析

时间复杂度:O(n) 注意O(n)是用估计的方式,涉及极限的定义,假设摸个程序的语句执行次数为,则其时间复杂度为中较大的影响最大的增量函数 例如:其时间复杂度 O(n) =  <caption> 常见的时间复杂度及对应典型算法 </caption> 描述 增长量级 典型代码 说明 举例 常数级别 1 1 a = b + c ;   普通语句 两数相加 对数级别 1 2 3 4 5 6 7 8 9 10 11 while(lo<=hi){     int mid = lo+(hi-lo)/2;          if(key<a[mid]) hi = mid+1;          else if(key>a[mid]) lo = mid-1;          else […]

Understand How View Renders in Android

From: https://medium.com/better-programming/understand-how-view-renders-in-android-763f0adfb95c In this article, we’re going to see an overview of how the view we created in XML gets rendered on the screen in pixels. Making a great-performing app is only possible by knowing what’s going under the hood. If you don’t know what the hardware is doing, you have a chance of using […]

工具库集锦

Save State: 自动恢复 Activity、Fragment 以及 View 的状态。无需任何类似 onSaveInstanceState 以及 onRestoreInstanceState 的模板代码;https://github.com/PrototypeZ/SaveState/blob/master/README_zh.md MangoIPC: 一个简单可靠的基于Android应用的跨进程通信框架在这里,可使用框架提供的RemoteService作为服务端,也可自定义Service,使用简单,与业务解耦; https://github.com/Mangosir/MangoIPC

使用 Android Studio 阅读 AOSP 源码

阅读前 AOSP 的准备 开始之前我们先为 AOSP 生成 IDEA 工程文件,便于稍后在 Android Studio 中载入。 1. 为 AOSP 生成 Android Studio 工程配置文件 cd /Volumes/AOSP # 设置 AOSP 编译所需的环境变量 source build/envsetup.sh # 使用 idegen.sh 脚本生成 IDEA 工程文件 development/tools/idegen/idegen.sh ——————————- Read excludes: 4ms Traversed tree: 68826ms 稍等片刻,即可在 AOSP 目录下看到生成的 android.iml 和 android.ipr,其中 iml 文件 表示 information of modules, 用来描述 AOSP 的模块信息。ipr […]

数据结构与算法资源集锦

算法资源:https://practice.geeksforgeeks.org/explore/?company%5B%5D=Amazon&problemType=functional&page=1&sortBy=submissions&company%5B%5D=Amazon,类似LeetCode,各种算法题加练习; https://leetcode-cn.com/problems/longest-palindromic-substring/,LeetCode,无需多言; 十大经典排序算法,九种语言实现:https://www.runoob.com/w3cnote_genre/algorithm Problem Solving with Algorithms and Data Structures using Python:https://runestone.academy/runestone/books/published/pythonds/index.html

从零开始写一个迷你版的Tomcat

来源 |http://www.jianshu.com/p/dce1ee01fb90 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你! Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系? 从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。 由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。 第一,提供Socket服务 Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已! 这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢? 第二,进行请求的分发 要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。 第三,需要把请求和响应封装成request/response 我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了! 话不多说,先来看一眼工程截图。 一、封装请求对象 这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。 二、封装响应对象 基于HTTP协议的格式进行输出写入。 三、Servlet 请求处理基类 前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。 四、Servlet 实现类 提供这2个具体的Servlet实现,只是为了后续的测试! 五、Servlet 配置 你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。 六、启动类 这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。 七、测试 实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。

Java资源集锦

在java中new一个对象的流程是怎样的: https://mp.weixin.qq.com/s/dTL43UoH2fy3764Pbzy-sg 在虚拟机遇到一条new的指令时,会去检查一遍在静态常量池中能否定位到一个类的符号引用 (就这个类的路径+名字),并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果不是第一次使用,那必须先执行相应的类加载过程,这个过程由类加载器来完成。类加载字面意思就可以理解成加载class文件,更准确点的说法就是会把class文件变成一个二进制流加载到内存中,即把类的描述信息加载到Metaspace。 https://www.cnblogs.com/duanxz/p/3520829.html 易百教程:https://www.yiibai.com/html/java/,很丰富基础Java教程资源; https://how2j.cn,偏基础,分基础、中级、高级等练习demo,还有学习路线指导; https://www.javatpoint.com,很全面的Java基础教程、Android教程以及JavaEE其它教程; https://snailclimb.gitee.io,本站为开源项目 JavaGuide (60k+ Star) 项目作者维护,涉及稍微高深一点的Java、数据库、设计模式等各类内容; https://github.com/gzc426/Java-Interview,Java interview知识整理; JavaEE从入门到放弃:https://blog.csdn.net/Neuf_Soleil/article/details/80962686; https://www.liaoxuefeng.com/wiki/1252599548343744,廖雪峰的官方网站Java,SQL,Python,Git教程; 博客园的图解系列:https://www.cnblogs.com/flashsun/p/14368520.html; Git的奇技淫巧:https://www.cnblogs.com/xueweihan/p/5703144.html,来自博客园; 杂项编程知识:https://www.bbsmax.com,有空看看,补充各类短板;   Build Web Java app with Java: http://courses.coreservlets.com/Course-Materials/csajsp2.html; Learn JSP: http://www.tutorialspoint.com/jsp/index.htm; Advanced Web Development with Java: http://www.umsl.edu/~siegelj/CS4010/; Sun Java System Web Proxy Server管理指南:https://docs.oracle.com/cd/E19438-01/819-3162/agintro.html

Scroll to top