p2p reactnative_p2p网p2p网 - CSDN
  • 项目地址 ... 此项目为脚手架,可供任意方向项目使用 ...克隆至本地 git clone https://github.com/seawind8888/lanmaolicai'cd至安装目录 npm install控制台运行 react-native run-i
    项目地址

    (https://github.com/seawind8888/lanmaolicai) 欢迎Star,欢迎Fork

    此项目为脚手架,可供任意方向项目使用

    构建方法

    1. 克隆至本地 git clone https://github.com/seawind8888/lanmaolicai'
    2. cd至安装目录 npm install
    3. 控制台运行 react-native run-ios 或者 react-native run-android

    项目预览

    0_1486452471901_图片1.png
    3_1486452483253_图片5.png 2_1486452483252_图片4.png 1_1486452483252_图片3.png 0_1486452483252_图片2.png

    依赖组件

    • react-native-tab-navigator
    • rn-viewpager
    • react-native-viewpager
    • react-native-parallax-scroll-view

    项目地址

    (https://github.com/seawind8888/lanmaolicai) 欢迎Star,欢迎Fork

    此项目为脚手架,可供任意方向项目使用

    构建方法

    1. 克隆至本地 git clone https://github.com/seawind8888/lanmaolicai'
    2. cd至安装目录 npm install
    3. 控制台运行 react-native run-ios 或者 react-native run-android

    项目预览

    0_1486452471901_图片1.png
    3_1486452483253_图片5.png 2_1486452483252_图片4.png 1_1486452483252_图片3.png 0_1486452483252_图片2.png

    依赖组件

    • react-native-tab-navigator
    • rn-viewpager
    • react-native-viewpager
    • react-native-parallax-scroll-view
    展开全文
  • 很多人都听说过比特币、以太坊等区块链项目,也了解过区块链的工作原理,可能还动手写过 Solidity 智能合约代码。对于一个之前未曾了解过区块链的新手来说,接触一个区块链项目最好的途径可能就是它的区块浏览器...

    开源项目地址:https://github.com/nervosnetwork/ckb-explorer-frontend
    CKB Explorer

    很多人都听说过比特币、以太坊等区块链项目,也了解过区块链的工作原理,可能还动手写过 Solidity 智能合约代码。对于一个之前未曾了解过区块链的新手来说,接触一个区块链项目最好的途径可能就是它的区块浏览器(Blockchain Explorer)了,为什么这么说呢,因为相比于区块链全节点,区块浏览器够直观、易懂和清晰。

    BTC Explorer

    区块浏览器最大的价值就是用清晰直观的 Web 元素展示复杂且不易被普通人琢磨的区块、交易等数据,绝大部分的区块链项目都是采用点对点的 P2P 网络,各个全节点之间通过一对一地相互交换数据维持全网的信息流通,所以对于普通人来说,想要直观看到网络中传输的信息并不是很方便,于是区块浏览器诞生了。

    既然是展示区块链网络流通的信息,那么这些信息到底是什么呢?其实很简单,无非就是区块、交易、地址、网络状态和一些统计信息,对于比特币区块浏览器来说,你可以看到最新的区块、交易信息,全网的难度和算力信息、一段时间的交易数量和平均交易费等信息,当然你也可以看到当前最新的比特币价格信息。例如5月13日炒得很热的比特币减半,你就可以在区块的详细信息中看到当前的奖励数量(6.25 BTC)。

    当然这篇文章不是来讨论比特币和以太坊的区块浏览器的,对于一个区块链项目开发者而言,如何做出一个质量说得过去且开源的区块浏览器项目,才是这篇文章的重点。换言之,如何做出一个尽量符合 Web 最佳实践的开源项目,我想这对于很多致力于写好代码的开发者来说,都会很有借鉴意义。

    Nervos CKB 区块浏览器

    对于一个开源项目来说,代码质量和架构是不能马虎的,不能说要照搬社区的最佳实践模板,起码也得保证足够得易扩展、结构清晰、文档易懂、格式统一、测试完备……这个好像可以列很长,总之对于开源项目来说,为了能让项目更拿得出手,我想大多数开发者都会尽量把代码写得足够漂亮、高质量。

    CKB Explorer

    有幸参与到 Nervos CKB Explorer 项目的前端开发,经历了一个开源项目从零开始一点点成长的过程,关于 Nervos CKB 的详细介绍不是本文的重点,如果你想了解这个区块链项目本身,Google 或者百度都能找到大量的介绍信息。简单来说 Nervos CKB 是比特币的升级版,在比特币的基础上引入了更加完备的智能合约,根据挖矿和网络情况动态调整出块时间、引入二级增发来平衡区块奖励不断减半引发的激励不足和安全风险。

    对于 Nervos CKB 来说,链上有大量的区块、交易、脚本、网络状态等信息,如果不去做处理分析并合理的归来展示,那么旁人是很难清晰直观地了解它,这就像任何一个优质的开源项目,文档都是不可或缺的。

    Nervos CKB 区块浏览器包含两部分,一部分是[后端服务CKB Explorer],一部分是[前端应用 CKB Explorer Frontend],后端服务主要是处理链上的区块和交易信息,然后加工出各种各样的信息,前端应用将这些数据更人性化地展示给用户,本文重点介绍前端应用。

    CKB Explorer 的最佳实践追求之路

    作为一个 Web 应用,我们选择了 React 框架,并且搭配 React 全家桶 Create React App / Router / Hooks / Dom 等。CSS 框架选择了 styled-components ,使得 React 组件和样式更加模块化,引入了 Enzyme/Jest 组合来完成 React 应用的单元和 UI 测试,作为时下最流行的 TypeScript 当然不能缺席,同时适配 PC 和 Mobile 的各种尺寸。引入了 Echarts 作为我们图表展示的第三方库,帮助我们绘制满足各种不同需求的图表。

    对于 React 应用来说,状态管理是极其重要的,我们采用 React Hooks 而非 React Redux 是因为我们认为 Hooks 在绝大部分场景下可以达到和 Redux 类似的效果,当然在状态管理方案上我们也借鉴了 Redux 的很多思想和最佳实践。

    对于一个面向全球的开源项目,还要适配多语言,我们提供了英文和中文两个语言版本,并提供了切换按钮。为了保证代码格式的一致性,我们引入了 prettier / eslint / stylelint。对于开源项目来说, CI 也是不可或缺的,我们同时引入了 Travis 和 GitHub Actions。

    我们希望 [CKB Explorer Frontend] 项目更符合开源的气质和标准,当然可能还有很多地方不够完善,但是我们依然觉得值得拿出来分享,开源和分享本来就符合区块链去中心化的特质,所以我们愿意分享自己的一些心得,同时也欣然接受外界的建议和批评。

    项目结构和规范

    我们采用 pages / components / routers / contexts / services / locales / assets / types / utils / __tests__ / __mocks__ 的项目组织结构,在 Create React App 推荐的项目结构基础上补充了一些我们独有的子目录。

    React

    所有的页面全部位于 pages 目录下,组件位于 components 目录下,路径相关的配置和代码位于 routers 目录下,全局状态管理交由 contexts 处理,services 则主要处理 Api 接口的 Fetch 方法以及封装各个业务逻辑的数据请求和处理,locales 管理本地化多语言的配置,assets 存放了项目所需要的图片和字体资源,types 存放了 TypeScript 需要的数据结构,utils 则存放了项目所需要的各种工具方法和常量,__tests__ 存放了项目的所有单元和 UI 测试,__mocks__ 存放了项目测试所需要的模拟数据。

    我们采用 prettier / eslint / stylelint / husky 来规范和检查 tscss 代码,保证所有开发者的本地格式都是一致的,以及 push 到 GitHub 的代码格式也是统一的,作为开源项目,可能会有其他开发者参与贡献代码,所以必要的代码规范和检查是必需的。

    另外为了更好地实现组件化和模块化,我们采用了 [styled-components] 这种 css-in-js 的第三方库,对于大多数组件和页面,我们都采用了 ComponentName/index.tsxComponentName/styled.tsx 代码组织结构,尽量减少代码耦合,增强可阅读性。

    由于我们有独立的 UI/UX 设计规范,所以绝大部分组件都是自定义实现,少部分复用 Ant Design,由于复用第三方组件库的组件并不是很多,所以在选择组件库时并没有存在过多纠结。

    状态管理 React Hooks

    对于响应式 UI 框架来说,状态管理是一个绕不过去的话题,面对逐渐膨胀的需求,前端需要管理各种状态信息,哪些信息需要封装在组件内部,哪些需要作为全局状态,以及如何管理多个组件或者页面状态共享等等,我们在借鉴 Redux 的基础上,根据 Hooks 的特性,我们构建一套基于 React Hooks 的状态管理方案。

    React Hooks 可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性,官方文档介绍 Hook 是一些可以让你在函数组件里“钩入” React state 及生命周期等特性的函数,简单来说,useState 提供了组件内部的状态管理机制,useEffect 相当于状态更新的控制器和过滤器,useContext 提供了全局状态管理机制,useReducer 可以用来管理组件本地的复杂 state。

    在设计状态归属的问题上,我们采用了尽量封装组件内部的状态管理,使得使用者不需要关心组件内部的状态是如何处理的,而对于一些全局的状态,例如后端 Api 数据、组件全局状态、本地化状态等,我们采用了 useContext / useReducer 结合的方式。

    具体而言,我们将全局状态管理都存放在 src/contexts/ 目录下,其中包含4个子目录,分别为 actions / providers / reducer / statesactions 包含了所有的全局状态指令,providers 提供了 useContext / useReducer 嵌入到 root dom 节点的方法,reducer 包含了所有的全局状态更新方法,states 则是全局状态数据结构和初始值。当然为了便于阅读和理解,我们对各个子目录安装业务逻辑进行了不同的划分,防止业务增多时带来不必要的臃肿。

    对于组件内部的状态管理,我们倾向于使用 useState / useEffect 来封装,useEffect 可以代替 React 的生命周期方法,完成一些特定情况下的状态更新和处理,同时允许副作用的存在,我们将所有的组件封装到 src/components/ 目录下,当然凡事也不是绝对的,对于 Header / Search这种需要应对全局状态的组件,我们同时使用了内部状态和全局状态管理的方式。

    单元测试和 UI 测试

    对于前端应用来说,测试同样是必不可少的,我们除了对 utils 目录下的工具方法提供了完备的单元测试外,还针对组件和页面引入了相关的 UI 测试,包括 UI 组件检查和快照对比测试,基本上可以满足大部分的测试场景,由于页面还有改版升级的可能性,所以并没有对页面中的每个元素做详细的检查和数据 mock

    在测试框架选型上,我们选择了 Facebook 的 Jest 和 Airbnb 的 EnzymeJest 用于单元测试, Enzyme 在 React 组件检查测试和快照测试上都是非常不错的选择,而且两者的学习成本都不高,可以很快上手,快速实现较为完备的测试用例。

    对于前端应用来说,追求测试覆盖度意义不是很大,首先绝大部分的 UI 并不是纯函数,其中包括了大量的异步请求、Hooks 方法、Dom 元素处理等,这些引入测试用例的复杂度要高很多,但是换来的质量可能并不没有很大的提高,同时前端页面经常出现改版升级等需求,每一次改版都需要对 UI 测试做调整,性价比不是很高。

    结语

    对于 Nervos CKB Explorer 项目我们还有进一步完善和提高的空间,业务上需要满足区块、交易、地址、Token、图表、Nervos DAO 以及搜索,而且随着 Nervos CKB 的不断发展,未来还会有跟多的需求,这就对我们项目本身的扩展性和可维护性提出了很高的要求,我们也会在这个过程中不断尝试和调整。

    在技术上我们希望 Nervos CKB Explorer 项目可以更符合开源精神和技术的最佳实践,我们希望可以给 Nervos CKB 社区和 Web 开发社区提供一些有益的业务和技术参考,同时我们也希望更多的开发者加入到 Nervos CKB 的社区生态中,欢迎大家给我们贡献代码和 Star,项目的 GitHub 地址为: https://github.com/nervosnetwork/ckb-explorer-frontend

    展开全文
  • 在项目中,会涉及到金钱的计算,会涉及到到小数点后面几位的运算: BigDecimal为不可变、任意精度的有符号十进制数。值unscaledValue * 10-scale,其中unscaledValue(非标度值)为任意精度整数,scale(标度)为32...

    在项目中,会涉及到金钱的计算,会涉及到到小数点后面几位的运算:

    • BigDecimal为不可变、任意精度的有符号十进制数。值unscaledValue * 10-scale,其中unscaledValue(非标度值)为任意精度整数,scale(标度)为32位整型(可负)。
    • 计算器要求20位精确度且支持超大数,double类型(最多支持16位有效数字且最大值仅支持10^308次方)不够用,可用BigDecimal承载数据进行运算。
    • BigDecimal支持任意精度和长度浮点数运算,运算时最好设各操作数小数精确度。特别除法需设保留几位小数,没设小数精确度则结果精确度等同操作数中最低精确度致结果不正确。

    所以说在进行项目书写的,涉及到金融的项目的时候要用BigDecimal来进行运算,这样的话 在进行小数运算的时候,就不会出错了。

    展开全文
  • 前言 早在2017年我们就建了第一个进击BAT的Android开发进阶交流群,两年期间很多群友都分享了自己的Android面试经历。其中就有很多群友已经斩获蚂蚁金服,天猫,高德,盒马等阿里系offer 收集反馈的面经资料比较乱...

    前言

    早在2017年我们就建了第一个进击BAT的Android开发进阶交流群,两年期间很多群友都分享了自己的Android面试经历。其中就有很多群友已经斩获蚂蚁金服,天猫,高德,盒马等阿里系offer

    收集反馈的面经资料比较乱,最近疫情期间终于空出大量时间,我们进行了分类,循序渐进,由基础到深入,由易到简。

    以下主要分享面经和个人学习方法,会包括很多PDF文档,如面试题库(含答案+解析)、学习笔记、实战文档和脑图等等,均可以免费分享,直接点击文档【面试合集】即可领取~

    将内基础容整理成了八个章节
    一、 java基础面试知识点
    二、 java深入源码级的面试题(有难度)
    三、 数据结构、 线程、多线程和线程池
    四、Android基础知识点
    五、Android源码相关分析
    六、Android源码相关分析
    七、常见的一些原理性问题

    中高级面试题
    一、混合开发面试题

    高端技术面试题整理为九个章节
    一、图片
    二、网络和安全机制
    三、数据库
    四、算法
    五、插件化、模块化、组件化、热修复、增量更新、Gradle
    六、架构设计和设计模式
    七、性能优化
    八、NDK、jni、Binder、AIDL、进程通信有关
    九、framework层、ROM定制、Ubuntu、Linux之类的问题

    接上来看题目吧,由于文章篇幅问题只展示一部分

    (一) java基础面试知识点
    • java中==和equals和hashCode的区别
    • int、char、long各占多少字节数
    • int与integer的区别
    • 谈谈对java多态的理解
    • String、StringBuffer、StringBuilder区别
    • 什么是内部类?内部类的作用
    • 抽象类和接口区别
    • 抽象类的意义
    • 抽象类与接口的应用场景
    • 抽象类是否可以没有方法和属性?
    • 接口的意义
    • 泛型中extends和super的区别
    • 父类的静态方法能否被子类重写
    • 进程和线程的区别
    • final,finally,finalize的区别
    • 序列化的方式
    • Serializable 和Parcelable 的区别
    • 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
    • 静态内部类的设计意图
    • 成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
    • 谈谈对kotlin的理解
    • 闭包和局部内部类的区别
    • string 转换成 integer的方式及原理
    (二) java深入源码级的面试题(有难度)
    • 哪些情况下的对象会被垃圾回收机制处理掉?
    • 讲一下常见编码方式?
    • utf-8编码中的中文占几个字节;int型几个字节?
    • 静态代理和动态代理的区别,什么场景使用?
    • Java的异常体系
    • 谈谈你对解析与分派的认识。
    • 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?
    • Java中实现多态的机制是什么?
    • 如何将一个Java对象序列化到文件里?
    • 说说你对Java反射的理解
    • 说说你对Java注解的理解
    • 说说你对依赖注入的理解
    • 说一下泛型原理,并举例说明
    • Java中String的了解
    • String为什么要设计成不可变的?
    • Object类的equal和hashCode方法重写,为什么?
    (三) 数据结构
    • 常用数据结构简介
    • 并发集合了解哪些?
    • 列举java的集合以及集合之间的继承关系
    • 集合类以及集合框架
    • 容器类介绍以及之间的区别(容器类估计很多人没听这个词,Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections),具体的可以看看这篇博文 Java容器类
    • List,Set,Map的区别
    • List和Map的实现方式以及存储方式
    • HashMap的实现原理
    • HashMap数据结构?
    • HashMap源码理解
    • HashMap如何put数据(从HashMap源码角度讲解)?
    • HashMap怎么手写实现?
    • ConcurrentHashMap的实现原理
    • ArrayMap和HashMap的对比
    • HashTable实现原理
    • TreeMap具体实现
    • HashMap和HashTable的区别
    • HashMap与HashSet的区别
    • HashSet与HashMap怎么判断集合元素重复?
    • 集合Set实现Hash怎么防止碰撞
    • ArrayList和LinkedList的区别,以及应用场景
    • 数组和链表的区别
    • 二叉树的深度优先遍历和广度优先遍历的具体实现
    • 堆的结构
    • 堆和树的区别
    • 堆和栈在内存中的区别是什么(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答)?
    • 什么是深拷贝和浅拷贝
    • 手写链表逆序代码
    • 讲一下对树,B+树的理解
    • 讲一下对图的理解
    • 判断单链表成环与否?
    • 链表翻转(即:翻转一个单项链表)
    • 合并多个单有序链表(假设都是递增的)
    (四) 线程、多线程和线程池
    • 开启线程的三种方式?
    • 线程和进程的区别?
    • 为什么要有线程,而不是仅仅用进程?
    • run()和start()方法区别
    • 如何控制某个方法允许并发访问线程的个数?
    • 在Java中wait和seelp方法的不同;
    • 谈谈wait/notify关键字的理解
    • 什么导致线程阻塞?
    • 线程如何关闭?
    • 讲一下java中的同步的方法
    • 数据一致性如何保证?
    • 如何保证线程安全?
    • 如何实现线程同步?
    • 两个进程同时要求写或者读,能不能实现?如何防止进程的同步?
    • 线程间操作List
    • Java中对象的生命周期
    • Synchronized用法
    • synchronize的原理
    • 谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解
    • static synchronized 方法的多线程访问和作用
    • 同一个类里面两个synchronized方法,两个线程同时访问的问题
    • volatile的原理
    • 谈谈volatile关键字的用法
    • 谈谈volatile关键字的作用
    • 谈谈NIO的理解
    • synchronized 和volatile 关键字的区别
    • synchronized与Lock的区别
    • ReentrantLock 、synchronized和volatile比较
    • ReentrantLock的内部实现
    • lock原理
    • 死锁的四个必要条件?
    • 怎么避免死锁?
    • 对象锁和类锁是否会互相影响?
    • 什么是线程池,如何使用?
    • Java的并发、多线程、线程模型
    • 谈谈对多线程的理解
    • 多线程有什么要注意的问题?
    • 谈谈你对并发编程的理解并举例说明
    • 谈谈你对多线程同步机制的理解?
    • 如何保证多线程读写文件的安全?
    • 多线程断点续传原理
    • 断点续传的实现
    一)Android基础知识点
    • 四大组件是什么
    • 四大组件的生命周期和简单用法
    • Activity之间的通信方式
    • Activity各种情况下的生命周期
    • 横竖屏切换的时候,Activity 各种情况下的生命周期
    • Activity与Fragment之间生命周期比较
    • Activity上有Dialog的时候按Home键时的生命周期
    • 两个Activity 之间跳转时必然会执行的是哪几个方法?
    • 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
    • Activity的四种启动模式对比
    • Activity状态保存于恢复
    • fragment各种情况下的生命周期
    • Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用?
    • 如何实现Fragment的滑动?
    • fragment之间传递数据的方式?
    • Activity 怎么和Service 绑定?
    • 怎么在Activity 中启动自己对应的Service?
    • service和activity怎么进行数据交互?
    • Service的开启方式
    • 请描述一下Service 的生命周期
    • 谈谈你对ContentProvider的理解
    • 说说ContentProvider、ContentResolver、ContentObserver 之间的关系
    • 请描述一下广播BroadcastReceiver的理解
    • 广播的分类
    • 广播使用的方式和场景
    • 在manifest 和代码中如何注册和使用BroadcastReceiver?
    • 本地广播和全局广播有什么差别?
    • BroadcastReceiver,LocalBroadcastReceiver 区别
    • AlertDialog,popupWindow,Activity区别
    • Application 和 Activity 的 Context 对象的区别
    • Android属性动画特性
    • 如何导入外部数据库?
    • LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景。
    • 谈谈对接口与回调的理解
    • 回调的原理
    • 写一个回调demo
    • 介绍下SurfView
    • RecycleView的使用
    • 序列化的作用,以及Android两种序列化的区别
    • 差值器
    • 估值器
    • Android中数据存储方式
    (二)Android源码相关分析
    • Android动画框架实现原理
    • Android各个版本API的区别
    • Requestlayout,onlayout,onDraw,DrawChild区别与联系
    • invalidate和postInvalidate的区别及使用
    • Activity-Window-View三者的差别
    • 谈谈对Volley的理解
    • 如何优化自定义View
    • 低版本SDK如何实现高版本api?
    • 描述一次网络请求的流程
    • HttpUrlConnection 和 okhttp关系
    • Bitmap对象的理解
    • looper架构
    • ActivityThread,AMS,WMS的工作原理
    • 自定义View如何考虑机型适配
    • 自定义View的事件
    • AstncTask+HttpClient 与 AsyncHttpClient有什么区别?
    • LaunchMode应用场景
    • AsyncTask 如何使用?
    • SpareArray原理
    • 请介绍下ContentProvider 是如何实现数据共享的?
    • AndroidService与Activity之间通信的几种方式
    • IntentService原理及作用是什么?
    • 说说Activity、Intent、Service 是什么关系
    • ApplicationContext和ActivityContext的区别
    • SP是进程同步的吗?有什么方法做到同步?
    • 谈谈多线程在Android中的使用
    • 进程和 Application 的生命周期
    • 封装View的时候怎么知道view的大小
    • RecycleView原理
    • AndroidManifest的作用与理解
    (三)常见的一些原理性问题
    • Handler机制和底层实现
    • Handler、Thread和HandlerThread的差别
    • handler发消息给子线程,looper怎么启动?
    • 关于Handler,在任何地方new Handler 都是什么线程下?
    • ThreadLocal原理,实现及如何保证Local属性?
    • 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系
    • 请描述一下View事件传递分发机制
    • Touch事件传递流程
    • 事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?
    • View和ViewGroup分别有哪些事件分发相关的回调方法
    • View刷新机制
    • View绘制流程
    • 自定义控件原理
    • 自定义View如何提供获取View属性的接口?
    • Android代码中实现WAP方式联网
    • AsyncTask机制
    • AsyncTask原理及不足
    • 如何取消AsyncTask?
    • 为什么不能在子线程更新UI?
    • ANR产生的原因是什么?
    • ANR定位和修正
    • oom是什么?
    • 什么情况导致oom?
    • 有什么解决方法可以避免OOM?
    • Oom 是否可以try catch?为什么?
    • 内存泄漏是什么?
    • 什么情况导致内存泄漏?
    • 如何防止线程的内存泄漏?
    • 内存泄露场的解决方法
    • 内存泄漏和内存溢出区别?
    • LruCache默认缓存大小
    • ContentProvider的权限管理(解答:读写分离,权限控制-精确到表级,URL控制)
    • 如何通过广播拦截和abort一条短信?
    • 广播是否可以请求网络?
    • 广播引起anr的时间限制是多少?
    • 计算一个view的嵌套层级
    • Activity栈
    • Android线程有没有上限?
    • 线程池有没有上限?
    • ListView重用的是什么?
    • Android为什么引入Parcelable?
    • 有没有尝试简化Parcelable的使用?
    (四)开发中常见的一些问题
    • ListView 中图片错位的问题是如何产生的?
    • 混合开发有了解吗?
    • 知道哪些混合开发的方式?说出它们的优缺点和各自使用场景?(解答:比如:RN,weex,H5,小程序,WPA等。做Android的了解一些前端js等还是很有好处的);
    • 屏幕适配的处理技巧都有哪些?
    • 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达?
    • 动态布局的理解
    • 怎么去除重复代码?
    • 画出 Android 的大体架构图
    • Recycleview和ListView的区别
    • ListView图片加载错乱的原理和解决方案
    • 动态权限适配方案,权限组的概念
    • Android系统为什么会设计ContentProvider?
    • 下拉状态栏是不是影响activity的生命周期
    • 如果在onStop的时候做了网络请求,onResume的时候怎么恢复?
    • Bitmap 使用时候注意什么?
    • Bitmap的recycler()
    • Android中开启摄像头的主要步骤
    • ViewPager使用细节,如何设置成每次只初始化当前的Fragment,其他的不初始化?
    • 点击事件被拦截,但是想传到下面的View,如何操作?
    • 微信主页面的实现方式
    • 微信上消息小红点的原理
    • CAS介绍(这是阿里巴巴的面试题,我不是很了解,可以参考博客: CAS简介

    三、混合开发面试题

    大厂除了技术深度之外,还要求你具备一些广度的知识,比如你要会前端知识,会混合开发,至少会一种脚本语言,C c++更不用说了,也是必会的。

    • Hybrid做过吗?
    • Hybrid通信原理是什么,有做研究吗?
    • react native有多少了解?讲一下原理。
    • weex了解吗?如何自己实现类似技术?
    • flutter了解吗?内部是如何实现跨平台的?
    • Dart语言有研究贵吗?
    • 快应用了解吗?跟其她方式相比有什么优缺点?
    • 说说你用过的混合开发技术有哪些?各有什么优缺点?
    • Python会吗?
    • 会不会PHP?
    • Gradle了解多少?groovy语法会吗?

    四、高端技术面试题

    这里讲的是大公司需要用到的一些高端Android技术,这里专门整理了一个文档,希望大家都可以看看。这些题目有点技术含量,需要好点时间去研究一下的。

    (一)图片
    • 图片库对比
    • 图片库的源码分析
    • 图片框架缓存实现
    • LRUCache原理
    • 图片加载原理
    • 自己去实现图片库,怎么做?
    • Glide源码解析
    • Glide使用什么缓存?
    • Glide内存缓存如何控制大小?
    (二)网络和安全机制
    • 网络框架对比和源码分析
    • 自己去设计网络请求框架,怎么做?
    • okhttp源码
    • 网络请求缓存处理,okhttp如何处理网络缓存的
    • 从网络加载一个10M的图片,说下注意事项
    • TCP的3次握手和四次挥手
    • TCP与UDP的区别
    • TCP与UDP的应用
    • HTTP协议
    • HTTP1.0与2.0的区别
    • HTTP报文结构
    • HTTP与HTTPS的区别以及如何实现安全性
    • 如何验证证书的合法性?
    • https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?
    • client如何确定自己发送的消息被server收到?
    • 谈谈你对WebSocket的理解
    • WebSocket与socket的区别
    • 谈谈你对安卓签名的理解。
    • 请解释安卓为啥要加签名机制?
    • 视频加密传输
    • App 是如何沙箱化,为什么要这么做?
    • 权限管理系统(底层的权限是如何进行 grant 的)?
    (三)数据库
    • sqlite升级,增加字段的语句
    • 数据库框架对比和源码分析
    • 数据库的优化
    • 数据库数据迁移问题
    (四)算法
    • 排序算法有哪些?
    • 最快的排序算法是哪个?
    • 手写一个冒泡排序
    • 手写快速排序代码
    • 快速排序的过程、时间复杂度、空间复杂度
    • 手写堆排序
    • 堆排序过程、时间复杂度及空间复杂度
    • 写出你所知道的排序算法及时空复杂度,稳定性
    • 二叉树给出根节点和目标节点,找出从根节点到目标节点的路径
    • 给阿里2万多名员工按年龄排序应该选择哪个算法?
    • GC算法(各种算法的优缺点以及应用场景)
    • 蚁群算法与蒙特卡洛算法
    • 子串包含问题(KMP 算法)写代码实现
    • 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
    • 万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
    • 百度POI中如何试下查找最近的商家功能(提示:坐标镜像+R树)。
    • 两个不重复的数组集合中,求共同的元素。
    • 两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?
    • 一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法
    • 一张Bitmap所占内存以及内存占用的计算
    • 2000万个整数,找出第五十大的数字?
    • 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
    • 求1000以内的水仙花数以及40亿以内的水仙花数
    • 5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同
    • 时针走一圈,时针分针重合几次
    • N*N的方格纸,里面有多少个正方形
    • x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完?
    (五)插件化、模块化、组件化、热修复、增量更新、Gradle
    • 对热修复和插件化的理解
    • 插件化原理分析
    • 模块化实现(好处,原因)
    • 热修复,插件化
    • 项目组件化的理解
    • 描述清点击 Android Studio 的 build 按钮后发生了什么
    (六)架构设计和设计模式
    • 谈谈你对Android设计模式的理解
    • MVC MVP MVVM原理和区别
    • 你所知道的设计模式有哪些?
    • 项目中常用的设计模式
    • 手写生产者/消费者模式
    • 写出观察者模式的代码
    • 适配器模式,装饰者模式,外观模式的异同?
    • 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
    • 谈谈对RxJava的理解
    • RxJava的功能与原理实现
    • RxJava的作用,与平时使用的异步操作来比的优缺点
    • 说说EventBus作用,实现方式,代替EventBus的方式
    • 从0设计一款App整体架构,如何去做?
    • 说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)
    • 谈谈对java状态机理解
    • Fragment如果在Adapter中使用应该如何解耦?
    • Binder机制及底层实现
    • 对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?
    • 实现一个Json解析器(可以通过正则提高速度)
    • 统计启动时长,标准
    (七)性能优化
    • 如何对Android 应用进行性能分析以及优化?
    • ddms 和 traceView
    • 性能优化如何分析systrace?
    • 用IDE如何分析内存泄漏?
    • Java多线程引发的性能问题,怎么解决?
    • 启动页白屏及黑屏解决?
    • 启动太慢怎么解决?
    • 怎么保证应用启动不卡顿?
    • App启动崩溃异常捕捉
    • 自定义View注意事项
    • 现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的5层都可以涉及)。
    • Https请求慢的解决办法(提示:DNS,携带数据,直接访问IP)
    • 如何保持应用的稳定性
    • RecyclerView和ListView的性能对比
    • ListView的优化
    • RecycleView优化
    • View渲染
    • Bitmap如何处理大图,如一张30M的大图,如何预防OOM
    • java中的四种引用的区别以及使用场景
    • 强引用置为null,会不会被回收?
    (八)NDK、jni、Binder、AIDL、进程通信有关
    • 请介绍一下NDK
    • 什么是NDK库?
    • jni用过吗?
    • 如何在jni中注册native函数,有几种注册方式?
    • Java如何调用c、c++语言?
    • jni如何调用java层代码?
    • 进程间通信的方式?
    • Binder机制
    • 简述IPC?
    • 什么是AIDL?
    • AIDL解决了什么问题?
    • AIDL如何使用?
    • Android 上的 Inter-Process-Communication 跨进程通信时如何工作的?
    • 多进程场景遇见过么?
    • Android进程分类?
    • 进程和 Application 的生命周期?
    • 进程调度
    • 谈谈对进程共享和线程安全的认识
    • 谈谈对多进程开发的理解以及多进程应用场景
    • 什么是协程?
    (九)framework层、ROM定制、Ubuntu、Linux之类的问题
    • java虚拟机的特性
    • 谈谈对jvm的理解
    • JVM内存区域,开线程影响哪块内存
    • 对Dalvik、ART虚拟机有什么了解?
    • Art和Dalvik对比
    • 虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派)
    • 谈谈你对双亲委派模型理解
    • JVM内存模型,内存区域
    • 类加载机制
    • 谈谈对ClassLoader(类加载器)的理解
    • 谈谈对动态加载(OSGI)的理解
    • 内存对象的循环引用及避免
    • 内存回收机制、GC回收策略、GC原理时机以及GC对象
    • 垃圾回收机制与调用System.gc()区别
    • Ubuntu编译安卓系统
    • 系统启动流程是什么?(提示:Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程)
    • 大体说清一个应用程序安装到手机上时发生了什么
    • 简述Activity启动全部过程
    • App启动流程,从点击桌面开始
    • 逻辑地址与物理地址,为什么使用逻辑地址?
    • Android为每个应用程序分配的内存大小是多少?
    • Android中进程内存的分配,能不能自己分配定额内存?
    • 进程保活的方式
    • 如何保证一个后台服务不被杀死?(相同问题:如何保证service在后台不被kill?)比较省电的方式是什么?
    • App中唤醒其他进程的实现方式

    每个问题我们都尽量附上1个标准参考答案,都是我们反复摸索消化(真心花了很多时间),觉得写的比较好的文章作为答案。这样就可以节省大家自己去搜索的时间,把时间用在正确的东西上。

    其实我们也可以直接以简易的、群友分享的答案写出来,但是这并帮助不了同学们去深刻理解,三思之下还是采用标准答案作为参考。

    不明白或者想通俗了解的,可以【点击我】加入我们BAT技术群一起交流讨论。

    现在还附赠其他大厂面试合集,以及系统大厂老师教学视频!



    扫码一键加入!领取资料~

    展开全文
  • 个人听课笔记,侵删 顺序有所改变,根据个人理解再补充了...ELECTRON、ReactNative 开发客户端的应用 WebRTC P2P的数据传输开发视频会议 WebGL 制作大型3D游戏 WebAssembly 把其他语言(如C++)等编译成浏览器可以运.
    • 个人听课笔记,侵删
    • 顺序有所改变,根据个人理解再补充了其他内容

    什么是前端?


    前端的三个要点:

    1. GUI下人机交互的问题
    2. 跨终端问题
    3. Web技术栈

    一句话总结:使用web技术栈解决多端的图形界面交互的工程师

    前端技术栈


    前端应该关注哪些方面?

    前端的边界?

    • NodeJS 开发服务器端的应用
    • ELECTRON、ReactNative 开发客户端的应用
    • WebRTC P2P的数据传输开发视频会议
    • WebGL 制作大型3D游戏
    • WebAssembly 把其他语言(如C++)等编译成浏览器可以运行的程序

    开发环境

    HTML是什么?


    超文本:不是纯文字的东西,可以包含图片\标题\链接\表格之类的…

    (常识性内容略去)

    doctype声明文档类型,决定了浏览器的渲染模式,如果不声明会采用怪异模式渲染

    内容划分

    语义化是什么?

    • HTML中的元素、属性及属性值都拥有某些含义

    • 开发者应该遵循语义来编写HTML

      • 有序列表用 ol;无序列表用 ul
      • lang 属性表示内容所使用的语言
      • 等…

    要解释这个问题需要先回答谁在使用我们写的HTML?

    谁在使用我们写的HTML?

    • 开发者 - 修改、维护页面
    • 浏览器 - 展示页面
    • 搜索引擎 - ​​​​​提取关键词、排序
    • 屏幕阅读器 - 给盲人读页面内容

    语义化的好处

    • 代码可读性
    • 可维护性
    • 搜索引擎优化 SEO
    • 提升无障碍性

    如何做到语义化

    • 了解每个标签和属性的含义
    • 思考什么标签最适合描述这个内容
    • 不使用可视化工具生成代码
    展开全文
  • WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的Web页面就可以实现音视频对聊功能。而且WebRTC项目是开源的,我们可以借助WebRTC源码快速构建自己的音视频对聊功能。...
  • 今天发现package中 NFC都没怎么好好看过,导致我写一个新的东西很难,所以决定今天把它剖析完。哈,发现找到我想要的东西就不想写全拉,嘿,果然还是很懒!! 因为新东西是跟NFC TAG有关,故从这里入手,需要看得...
  • 本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在前面的文章中已经向大家介绍了如何构建信令服务器。但构建的信令服务器是如何工作的?哪些消息需要信令服务器控制和中转?...
  • 七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣。结合七牛实时流网络 LiveNet 和直播云解决方案的实践,我们用八...
  • react-native 运行报错:Error: Activity class {com.**/com.**.MainActivity} does not exist 实际上到这里资源已经编译完成了,只是并未安装到调试设备上。 笔者手机:redmi note7就出现过这个状况! 手机设置...
  • 2017 年开源中国社区新增开源项目排行榜 TOP 100 新鲜出炉! 这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度上预示着业界的最新流行...
  • 学习笔记0408

    2020-04-08 22:13:25
    1、什么是前端 解决GUI人机交互问题 跨终端 Web技术栈 ...ELECTRON、React Native-- 开发客户端应用 Web RTC-- P2P数据传输、多人视频会议 WebGL-- 大型3D游戏 WEBASSEMBLY-- 将其他语音编译成浏览器可...
  • 路由器 大杂烩

    2019-09-24 00:50:40
    广播包,组播包只能在局域网内通讯 2.4G跟5G是可以发包通讯的。bssid差一位; BSSID:路由器MAC地址;加BSSID,有另外的路由器,SSID一致。 Android部分手机收不到组包的。...手机连上设备后,通过TCP连接9875这个...
  • 前端星计划Day5笔记

    2020-04-12 23:01:06
    小程序 简介 小程序优势:提供跨平台解决方案;降低开发成本;具有平台优势,适合推广;...React Native/Weex:通过JSCore执行,通过Bridges和Native组件交互 Flutter:Dart直接与独立系统的UI库交互 微信小程序...
  • 目录小程序,大世界Web前端点播直播入门代码的自我修养技术翻译:进阶的直梯 小程序,大世界 一、简介 1.小程序解决了什么问题 ...react native/weex flutter 二、小程序技术架构 1.文件结构及其含义 .json ...
  • 目前越来越多的应用场景应用到人脸识别技术,通过人脸比对来进行人员身份认证,但是hack通过拿他人的身份证件也能冲破人脸系统的限制,造成安全隐患。为了防范此类情况的发生,活体检测技术应运而生,很好的完善了...
  • android开源库汇总

    2019-05-16 23:20:17
    opandroid– android p2p的开源实现。 okio– square出的Okio这个库,尤其擅长处理二进制数据。如果觉得Java的输入输出流实在太复杂啰嗦,不妨试试Okio。 okhttp– square出的okhttp库。 OkHttpPl...
  • 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝、京东等)、金融(各手机行业、P2P借贷等)、医疗(智慧医疗)、交通(滴滴、Uber等)、教育(慕课网等)、餐饮(饿了吗、美团等)……反正只要是个企业...
  • UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库。 awesome-android-ui – ui库,非常多的ui及特效。 ChipsLibrary – 在Android EditText中实现...
  • CNCF CloudNative Landscape

    2019-10-04 12:05:57
    CNCF Cloud Native Interactive Landscape 1. App Definition and Development 1. Database Vitess:itess is a database clustering system for horizontal scaling of MySQL. Apache CarbonD...
1 2 3 4 5 ... 20
收藏数 408
精华内容 163
关键字:

p2p reactnative