自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

许佳佳的博客

热爱生活,热爱技术,热爱互联网,热爱祖国。

  • 博客(349)
  • 资源 (60)
  • 收藏
  • 关注

原创 由浅入深 学习 Android Binder(八)- IServiceManager与BpServiceManager(native层)

概述前文已经讲解过java层ServiceManager的逻辑,如果没有了解过的读者建议看下:由浅入深 学习 Android Binder(七)- IServiceManager与ServiceManagerNative(java层)此文承接前文,继续讲下在native层的IServiceManager,具体的path是/frameworks/native/libs/binder/IServiceManager.cpp。native层还有/frameworks/native/cmds/servi

2021-01-11 08:34:26 2588

原创 许佳佳的2020,疫情下格外有意义的一年

晚上11点仍在工作的医务工作者这张照片拍摄于2020年12月30日晚上11点多。我们在西二旗租的房子附近,近期来过一名新冠的患者,因此安排了集体的新冠检测。我和老婆本来是安排下午4点的检测,由于人员过多,一直等到晚上10点多都没有安排上。尽早的拿到检测结果,在家隔离的我就可以尽早去公司上班,毕竟在家工作的效率还是太低了。最终我们是当天没有安排上,在第二天中午又重新安排的检测。本来是一件很让人烦躁的事,看到这张照片的时候莫名的平静。我们的那些小事与 在疫情中失去或付出更多的人们相比,又算得了什么

2021-01-05 08:49:13 996 2

原创 由浅入深 学习 Android Binder(七)- IServiceManager与ServiceManagerNative(java层)

概述ServiceManager于android binder来说是非常重要的一部分。ServiceManager在java层与native层都有各自的逻辑,本文主要讲下java层ServiceManager的逻辑。如果了解过binder的读者,可能也多少会听说过binder与serviceManager的关系为了方便读者有个整体的认知,附上整体的流程图:何处使用了ServiceManager前文由浅入深 学习 Android Binder(二)- bindService流程中,在clie

2021-01-04 08:47:51 3733

原创 从小地方到大城市,是“翻身的起点”还只是“昙花一现”

我和老婆都是从小地方来的北京,现在工作于某个短视频互联网公司。近期,我和我老婆在慢慢筹备婚礼,因此会不由自主的畅想未来。结果想来的更多的,,其实是焦虑。大城市 or 小城市如果想在大城市安家,那么仅仅房子就可能是压死我们的一座大山,更别提还要考虑车位、车牌、小孩的学区这些。如果想要工作几年回小城市,那么回去就等于失业,或者说等于是放弃了作为程序员的职业生涯,小城市很少能有相关岗位,更别提公司前景,是否能涨薪这些了。而作为程序员,目前网上经常说的35岁危机,也的确是骇人听闻。不同的自我定位想想块

2020-12-27 09:44:28 532

原创 由浅入深 学习 Android Binder(六)- IPC 调用流程

概述如果使用aidl来进行IPC,在client进程执行的transct方法后最终会执行到server进程的onTransact方法,如下图:对aidl还不是很了解的读者可以看下笔者的前文:由浅入深 学习 Android Binder(一)- AIDL那么在client进程调用transact后,究竟触发了哪些逻辑呢?本文将针对此点深入探索。此文探讨的是两个进程之间的IPC。如果是同一个进程之间调用,流程会简单一些,有兴趣的读者可以自行探索。调用流程先给出流程图,便于读者有一个整体

2020-12-19 07:55:03 3192 4

原创 由浅入深 学习 Android Binder(五)- binder如何在进程间传递

概述前文分析过bindService源码,该文章地址如下:由浅入深 学习 Android Binder(二)- bindService流程最终得到时序图如下:如上图,client进程与server进程是通过系统进程来进行通信的。实际demo中,有两个场景我们会接触到binder:client进程通过serviceConnection获取到系统进程传递的binder。server进程将service.onbind()返回的binder传递给系统进程。我们就以server给系统进程传递bi

2020-12-12 10:16:49 2971 1

原创 由浅入深 学习 Android Binder(四)- ibinderForJavaObject 与 javaObjectForIBinder

概述前文已经解析了java层binder在native层的形式。前文地址:由浅入深 学习 Android Binder(三)- java binder深究(从java到native)前文由于篇幅限制,没有继续探索JavaBBinder与BinderProxy,此文则将继续深入相关逻辑。ibinderForJavaObject 与 javaObjectForIBinderjava与native之间通过JNI来实现数据的传递与交互。主要就是通过native层的ibinderForJavaObje

2020-12-11 08:31:36 1941

原创 由浅入深 学习 Android Binder(三)- java binder深究(从java到native)

概述前文地址:由浅入深 学习 Android Binder(二)- bindService流程前文讲到bindService流程,其中多次碰到用binder实现的IPC,有以下几个:client进程 通过IPC 通知AMS进程去bindServiceAMS进程 通过IPC 通知server进程去bindServiceserver进程 通过IPC 通知AMS进程bindService结果AMS进程 通过IPC 告诉client进程bindService结果本文就选择”client通知AM

2020-12-06 05:12:49 1763 2

原创 由浅入深 学习 Android Binder(二)- bindService流程

概述前文已经讲过了binder在aidl的IPC中所起到的作用。其中的Binder是通过ServiceConnection+bindService获取到的。本文承接前文,详细探索一下从bindService到ServiceConnection.onServiceConnected()的流程。bindService流程bindService的流程其实有两种场景:Service冷启动Service热启动本文为了分析的更加全面,因此主要分析”Service冷启动“的场景。笔者此处先列出流程,读

2020-11-22 08:46:47 3840

原创 由浅入深 学习 Android Binder(一)- AIDL

概述demo项目 github地址:aidl是常用的android IPC方式,本文将根据一个demo来解析下AIDL的原理。为了便于读者理解,本文不会探究Binder的实现细节,可以认为Binder在此文的分析中被看做是一个“黑盒”。有一定经验的读者可以直接到文末看总结,最终流程图如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLrLwiAU-1605878532480)(evernotecid://214C33E9-92BC-434E-8AEC-B93

2020-11-22 08:37:59 8373 9

转载 Java8 JVM内存结构变了,永久代到元空间

JVM内存结构的细化为了更细化的讲解,我们将该图进行进一步的优化调整。针对java7及以前版本的细化。看出变化了吗?堆和方法区连在了一起,但这并不能说堆和方法区是一起的,它们在逻辑上依旧是分开的。但在物理上来说,它们又是连续的一块内存。也就是说,方法区和前面讲到的Eden和老年代是连续的。在继续进行下去之前,我们先来理解两个概念:规范和实现。规范和实现针对Java虚拟机的实现有专门的《Java虚拟机规范》,在遵守规范的前提下,不同的厂商会对虚拟机进行不同的实现。 就好比开发的过程中定义了接口

2020-11-13 21:28:21 658

原创 一篇文章理解进程、线程、协程

概述笔者之前已经对进程和线程有过了一定的探索,有兴趣的读者可以了解下:进程和线程的区别(Linux)近期笔者又接触到了协程,顺便也想尝试用一种更加通俗易懂的方式讲下这几个概念。期望能对有需要的读者有所帮助,如有理解不对的地方欢迎评论指出。为什么要有多进程?多进程目的:提高cpu的使用率例子:一个用户现在既想使用打印机,又想玩游戏。假设只有一个进程(先不谈多线程)从操作系统的层面看,我们使用打印机的步骤有如下:使用CPU执行程序,去硬盘读取需要打印的文件,然后CPU会长时间的等待

2020-11-01 08:17:42 1500 2

原创 Android存储空间总结

概述Android存储在6.0之前,真的可以用“混乱不堪”来形容。造成的原因很多,个人认为有以下几点:android早期手机本身的内存很小,大部分app的读写都在sd卡内操作。用户权限意识薄弱,android 6.0之前直接在安装时申请权限,用户往往在未知情况下就给予了存储权限。app为了使自己的应用数据好看,直接将资源存储到sd卡,存储在sd卡的文件将不会计算成该app的内存占用。app处于卖方市场。如果不给存储权限用户就无法使用app部分甚至全部功能。目前,随着Android越发完善,

2020-10-25 08:45:36 2502 5

原创 Android 悬浮窗日志工具

概述github地址:https://github.com/Double2hao/StudyFloatUtil在多端交互的场景中,客户端往往只扮演着平台的角色。最常见的如webview,小程序等等——客户端虽然是最终程序的展现平台,但是逻辑却不会由客户端的工工程师来直接开发,而是由前端的工程师开发完后运行在客户端上。由于客户端的功能是由客户端工程师提前开发好后提供给前端的工程师调用,因此这些功能一旦出现问题,那么就需要客户端工程师和前端工程师一起联调沟通解决。类似于这样的场景中,为了减少开发和

2020-10-17 14:53:40 2691

原创 android viewpager无限轮播

概述github地址:https://github.com/Double2hao/ViewPagerCycleTest一直很好奇ViewPager无限轮播的实现方式,于是稍微研究了下,作此文记录之,效果如下:原理一般情况下ViewPager的size等于显示的fragment的个数。无限轮播只需要,将ViewPager的size设置成无限大,通过取余后的值来显示Fragment即可。此demo中还加入了timer来自动轮播。并且如果用户手动滑动的话,自动轮播会停止。关键代码无限轮播

2020-10-17 10:57:36 12721

原创 mysql索引原理:B-Tree 和 B+Tree简介

本文参考:https://www.kancloud.cn/kancloud/theory-of-mysql-index/41856完全不了解B-Tree的读者可以先看下这篇文章:https://www.kancloud.cn/kancloud/theory-of-mysql-index/41844B-TreeB-Tree毫无疑问是树结构,如下图:主要有以下特性:d为大于1的一个...

2020-10-17 10:42:51 1782 2

原创 RecyclerView 回收机制解析

概述近期接触到RecyclerView回收机制相关的内容,于是作此文记录下相关探索。如记录的有问题欢迎评论探讨。定位回收机制源码笔者使用debug的方式,在adapter的onCreateViewHolder中打断点,于是得到该任务栈。思路:onCreateViewHolder是创建viewHolder的方法,那么在调用这个方法之前一定有是否复用的判断,因此断点在这个方法可以找到相关方法。然后我们就可以发现是RecyclerView#Recycler的tryGetViewHolderFor

2020-10-17 10:36:28 1745

原创 git diff的生成方式:myers diff算法

概述本文参考:https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/每个开发者多少都接触过git的diff功能,如下图:该功能能够展示出某个文件的改动信息,非常便于开发者的日常开发。本文将探讨下此功能实现的原理。myers diff 做了啥引用个例子a = ABCABBAb = CBABAC现在要找出ab之间的diff。仔细想一想,我们会发现其实两者之间的diff情况是有无数个的,比如可以找到以下几

2020-09-20 08:21:43 2580

原创 线程池解析(四)——submit源码解析(Runnable、Callable、Future、FutureTask)

概述线程池的submit也是常用的方法之一,它有很多个重载,涉及到了很多个类。本文将探索submit方法以及相关的各个类。submit源码我们看下ThreadPoolExecutor中sumit相关的源码。 protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) { return new FutureTask<T>(runnable, value);

2020-09-12 10:14:58 2236

原创 线程池解析(三)——Worker源码解析

概述在ThreadPoolExecutor中以Worker为单位对工作线程进行管理。那么Worker具体是做了什么呢?本文将围绕这个话题展开。Worker源码 private final class Worker extends AbstractQueuedSynchronizer implements Runnable { /** * This class will never be serialized, but we prov

2020-09-12 10:13:20 1144

原创 线程池解析(二)——execute、addWorker源码解析

概述线程池使用execute执行任务,在创建线程池后,开发者只要调用这个方法就能愉快的使用线程池了。本文将探索下其内部实现逻辑。execute源码 public void execute(Runnable command) { if (command == null) throw new NullPointerException(); int c = ctl.get(); if (workerCountO

2020-09-12 10:10:30 1246 1

原创 线程池解析(一)——概念总结

线程池作用节省资源。使用线程池可以避免每次异步操作都去创建一个线程。提高响应速度。由于线程池本身会创建一些线程,能够节省创建线程池的时间。更好的管理线程。线程池可以控制其线程的创建停止,存活个数等等。不仅能够保证系统的稳定运行,同时也可以更加方便的性能调优。核心参数corePoolSize核心线程数。线程池中使用会保留的对象,maximumPoolSize线程池上限。线程池中线程的最大个数keepAliveTime线程维持时间。corePoolSize<当前线程个数&l

2020-08-29 10:24:58 602

原创 Gson 根据条件解析

概述Gson在实际使用中,可能出现需要根据其中的某些参数来决定另外的参数的类型的情况,如下数据结构:public class DataOne { public int type;//0代表data是DataTwo 1代表data是DataThree public Object data;//类型是DataTwo 或者DataThree}public class DataThree { public int height; public int width;}public c

2020-08-21 07:32:19 725

原创 小程序小游戏更新机制总结

概述本文主要从以下几点总结下小程序(小游戏)的更新机制:必要字段自动更新逻辑旧版本的清理优化本文后面阐述统一用“小程序”替代“小程序或小游戏”必要字段最小可使用的版本小程序并不一定会去兼容所有的老版本。有些情况下,老版本会直接无法运行,小程序会期望用户必须更新到某个版本。这里笔者也考虑过使用使用一个字段来表明“是否要强制更新”。但是考虑后发现很有问题,比如有ABC三个版本,B设置“强制更新”,C设置“非强制更新”,这样一旦出现A->C的情况就有问题了。B设置“强制更新

2020-08-21 07:30:52 3279 1

原创 android Activity任务栈使用总结

前言android上对于任务栈的控制还是比较常见的,尤其是在小程序、小游戏的场景。笔者近期也有在实际项目中碰到,因此就好好学习了一下,作此文以记录。本文主要还是自己的一些使用总结,如有不对或者需要补充的地方,欢迎评论交流。此文需要有对android启动模式的基础,还不了解的读者推荐看下笔者前面的文章:完全理解android Activity启动模式LauchMode (深入Activity与任务栈)使用概念android上要使用多任务栈,除了要了解启动模式之外,就是需要了解taskAffi

2020-08-01 14:33:53 3552

原创 android handler postDelay源码解析

概述postDelay是在android中经常用来处理时延任务的操作。近期突然比较好奇postDelay实现时延的原理,于是学习后作此文。如果对handler原理还完全不了解的读者可以看下笔者的此篇文章:Handler源码解析postDelay的调用过程 public final boolean postDelayed(@NonNull Runnable r, long delayMillis) { return sendMessageDelayed(getPostMessag

2020-07-18 17:36:30 1485

原创 android 自定义View的几种方式

概述本文主要总结一下笔者实际项目中碰到的自定义View的几种方式,以及优劣。大概有以下几种方式:使用时绑定不使用xml,直接java实现一次定义,随处可用本文更多的还是个人使用经验的总结,如有错误或者需要补充的地方,欢迎评论交流。Demodemo中分别使用三种方式实现了类似的布局。除了作者将列出的优劣之外,读者可自行查看代码来进行比较。实现效果与项目文件如下:一、使用时绑定优势页面布局与View的业务逻辑解耦。页面布局使用xml实现,可以预览,在页面较复杂的情况下,可以

2020-07-18 10:23:42 3307

原创 webview 实际项目 使用总结

概述webview在客户端使用非常广泛。本文主要针对个人对webview的应用和学习对相关知识点做一个总结,如有整理的不对或者不同意见欢迎评论交流。目前市场上的app使用场景有以下:(只是举例,并不代表所有场景)广告页面活动页面与客户端app功能关系不大,但是两端都要有的页面。例如:客服页面,申诉页面,签到页面等。优劣使用webview主要有以下优势:不用跟客户端版本,开发灵活。随时可以发布新内容或者修改bug。双端统一,一份代码在android与ios两端都可以使用。业务上解耦

2020-07-11 16:23:00 1394

原创 android动画如何更新UI(ValueAnimator源码解析)

概述android动画经常会碰到卡顿,或者阻塞主进程之类的问题。为了排查此类问题,不得不对动画原理了解一二,于是作此文。此文围绕两个主线问题展开:ui更新的频率是如何控制的?比如,1秒内会更新多少次?每次更新UI的时候所带的update的value是如何控制的?比如,现在有个0到100的动画,在第三次执行update的时候,value是多少?对动画还是不太了解的读者可以看下笔者之前的文章:Android动画总结 (valueAnimator、objectAnimator、Animat

2020-06-20 19:40:09 1449

原创 android自定义动画插值器(Interpolator)

前言之前已经讲过动画相关的内容,没有接触过的读者可以看下笔者之前对android动画使用的整理。Android动画总结 (valueAnimator、objectAnimator、AnimatorSet、PropertyValuesHolder、Interpolator)插值器概念动画插值器可以用来控制动画的变化规律,比如变化速率是先快后慢,还是先慢后快,或者是更细节的其他。android系统已经提供了一些常用的插值器,基本已经能满足大部分需求,对此有兴趣的可以看下笔者前言中的文章,此处就不徒

2020-06-20 14:32:14 2434

原创 一篇文章理解 同步异步、阻塞非阻塞

前述同步异步,阻塞非阻塞是一些非常常见的概念,但是对于开发者来说往往是用到了很难说清楚。笔者专门整理了下这方面的概念,作此文以记之。这部分内容可能存在一些争议,如有不同意见欢迎评论交流。概念个人理解同步异步与阻塞非阻塞最好的区分是从描述对象上:同步异步:用于描述任务、事件或者行为。阻塞非阻塞:用于描述线程或者进程是否会被挂起。同步一个任务调起另一个任务的时候,会去等待其任务返回结果(或执行结束),然后再继续执行。如下两图都是同步操作:在Task A调用Task B后,Task

2020-06-06 18:35:51 1981

原创 【StudyDownload】断点续传Demo

StudyDownloadStudyDownload项目地址:https://github.com/Double2hao/StudyDownload此项目展示了断点续传功能的简单实现,主要实现了以下功能:支持下载中途暂定下载将下载进度存储到本地,重启app后会从上次下载的位置开始下载支持清除原有的数据 理论概述本项目为了让项目更加简单化,尽量避免使用其他非基础知识。下载与文件的异步操作使用AsyncTask来实现,本地存储使用SharedPreferences来实现。断点续传

2020-06-06 11:28:14 481

转载 Android ActivityManagerService (AMS)总结

转载前言AMS在Android中算是比较重要的一个知识点,不管是binder的源码还是Serveice的源码,都是涉及到AMS的,因此理解“AMS是什么”对一个Android开发者来说还是很有必要的。笔者之前也有分析过相关的源码:bindService 源码解析(为什么是异步)已经有博主总结的比较好了,因此就不重开篇幅了。原文地址:https://github.com/xiangjiana/Android-MS/blob/master/android/ams.md概述ActivityMa

2020-05-23 14:30:18 3801 3

转载 HTTP缓存

原文地址:https://www.jianshu.com/p/b32d13655be7客户端缓存场景1、如果HTTP支持缓存,那么在缓存没有过期的情况下,会使用本地缓存。2、如果HTTP支持缓存,并且缓存已经过期,那么客户端不用使用本地缓存,会向服务器请求。HTTP header客户端是否对HTTP协议缓存,一般是根据HTTP协议的header来控制的。通用的主要有以下几个header。(并不是都会被使用到,具体要看服务器和客户端如何协商的)HTTP本身只是一个协议,是需要服务器与客户端一.

2020-05-23 11:31:34 356

转载 OKHttp源码解析 (复用连接池)

原文地址:https://www.jianshu.com/p/6166d28983a2复用连接池相关的主要三个类RealConnectionConnectionPoolStreamAllocation对流的处理使用Okio,Okio是okhttp中用于处理io的模块,没接触过的读者可以参考这篇文章:https://www.jianshu.com/p/f5941bcf3a2dRealConnection 要点代表着链接socket的链路,如果拥有了一个RealConnection.

2020-05-16 17:09:23 957

转载 Android 热修复原理(java类加载机制)

原文地址:https://www.jianshu.com/p/cb1f0702d59f热修原理(java类加载机制)DexClassLoader在加载一个类时会先从自身DexPathList对象中的Element数组中获取(Element[] dexElements)到对应的类,之后再加载。采用的是数组遍历的方式,不过注意,遍历出来的是一个个的dex文件。在for循环中,首先遍历出来的是dex文件,然后再是从dex文件中获取class,所以,我们只要让修复好的class打包成一个dex文件,放于E.

2020-05-16 16:08:07 699

转载 Java与Android的类加载器

双亲委派模型在加载一个字节码文件时,会询问当前的classLoader是否已经加载过此字节码文件。如果加载过,则直接返回,不再重复加载。如果没有加载过,则会询问它的Parent是否已经加载过此字节码文件,同样的,如果已经加载过,就直接返回parent加载过的字节码文件,而如果整个继承线路上的classLoader都没有加载过,才由child类加载器(即,当前的子classLoader)执行类的加载工作。特点显然,如果一个类被classLoader继承线路上的任意一个加载过,那么在以后整个系统的生命周期

2020-05-16 15:46:21 461

原创 解决方案:android onstop 延迟回调 10s的问题

概述近期碰到activity onstop延迟回调10s的问题。关于问题的具体复现和原因,有博主总结的很不错,此处给上原链接:深入分析Android中Activity的onStop和onDestroy()回调延时及延时10s的问题此文主要记录一下笔者目前认为的解决方案,以及各方案的优劣。1、避免过度频繁或耗时的主线程操作假设现在是ActivityOne跳转到ActivityTwo,那么...

2020-04-19 09:28:22 2837

原创 【StudyRouter】路由的自动注册

StudyRouter项目地址:https://github.com/Double2hao/StudyRouter此项目通过使用动态编译、注解解释器等技术,用最简单的方式实现了路由的自动注册。如对这方面知识有兴趣的朋友可以看看。实现通过注解解释器生成辅助类通过Transform出辅助类和要注入代码的位置。在相应的位置调用辅助类的相关代码,实现自动注册。涉及知识点列表笔者...

2020-04-19 08:18:27 603

原创 ARouter init 源码解析(自动注册的实现)

概要使用ARouter,我们只需要在必要的地方加上注解,然后在application中init Arouter就可以直接通过代码进行路由跳转了。为什么我们可以不用写任何注册的代码,就直接跳转到相关路由呢?答案肯定是——ARouter帮我们做了。@Route(path = "/test/activity2")public class Test2Activity extends AppComp...

2020-04-05 12:16:18 1913 2

android图片轮播效果,RollViewPager的简单使用

图片轮播算是我们用的比较多的一个功能,我之前也写过类似的文章(http://blog.csdn.net/double2hao/article/details/48896297),但是说实话自己写并不是特别方便,而且往往bug会比较多。而在github上有一些大神专门写了viewpager的轮播框架并且开源,供大家学习参考,这篇博客就教大家如何简单地使用开源框架RollViewPager。 对RollViewPager有兴趣,或者希望更深入学习的可以直接去github下载源码学习:https://github.com/Jude95/RollViewPager

2016-05-06

android Fragment与Activity互相发数据(附图详解)

笔者近期看官方training,发现了很多有用又好玩的知识。其中,fragment与Activity通信就是一个。 fragment与Activity通信主要是两点: 1、fragment传递信息给Activity 此点是通过在fragment中定义接口与Activity共享数据。 2、Activity传递信息给fragment 此点主要是通过fragment的getArgument()和setArgument()两个函数传递bundle来传递。

2016-03-25

实验二 插值方法(android)

一、实验内容 分别写出拉格朗日插值法与牛顿插值法的算法,编写程序上机调试出结果,要求所编程序适用于在任何一组插值节点,即能解决这一类问题,而不是某一个问题。 试验中以下列数据验证程序的正确性。 已知下列函数表 X 0.56160 0.56280 0.56401 0.56521 Y 0.82741 0.82659 0.82577 0.82495 求X=0.5635时的函数值。

2016-04-22

android 自定义控件(底部icon点击效果)

主要实现的功能: 1、在java代码中动态设置底部控件的icon和text。(搭配fragment的时候特别方便) 2、text点击时会加粗 3、封装成自定义控件,更加方便。 (考虑到新手可能不易理解,笔者代码没有多加功能) 把底部icon做成自定义控件的优势: 1、搭配fragment或者viewpager使用的时候更加方便,避免写过多重复性代码。 2、代码维护起来更加方便,比如要修改底部icon中的字体,直接在自定义控件的layout中修改就可以。 3、提高代码的可阅读性。

2016-04-08

实验一 直接法解线性方程组(android)

一、实验目的 掌握Guass列选主消去法,三角分解法解线性方程。 二、实验内容 分别写出Guass列选主元消去法,三角分解法的算法,编写程序上机调试出结果,要求所编程序适用于任何线性方程组问题,即能解决这一类问题,而不是某一个问题。 实验中以下列数据验证程序的正确性 1、Guass列选主元消去法 [2.5 2.3 -5.1][x1] [3.7] [5.3 9.6 1.5][x2]=[3.8] [8.1 1.7 -4.3][x3] [5.5] 2、Doolittle三角分解法 [ 2 10 0 -3 ] [-3 -4 -12 13] [ 1 2 3 -4 ] [ 4 14 9 -13]

2016-04-14

onMeasure简单方法 完美解决ListView与ScollView!

近期做项目碰到ScrollView与Listview冲突的情况,查看了网上一些解决listview和scollView的冲突的方法,最终选择了重写onMeasure的方法来解决这个问题。 在此对各种方法做一个个人的总结评价。 主要的方法有四种: 1、手动设置ListView高度(比如把高度设置为200dp) 评价:特别简单无脑,但是大大提高了代码的耦合性,比较适合“图方便”的新手。 2、使用单个ListView的addHeaderView()方法(给listview设置顶部固定的一个view) 评价:比较简便的方法,但是如果顶部布局需要监听滑动事件,也不可取。 3、使用LinearLayout取代ListView(重写LinearLayout) 评价:完全可行,但是让一个LinearLayout来实现Listview的功能真的觉得好奇怪啊。 4、重写ListView的onMeasure() 评价:只需要写几行代码,轻松解决冲突问题。不仅降低代码耦合性,而且简单。唯一的缺点,可能就是理解需要花比较多的时间。

2016-05-22

android Activity的启动模式 作用简析+demo详解

笔者近期做的一个项目用到了Activity的启动模式,也算是第一次深刻地领会到了其强大与方便。在此也是将自己所得与大家分享,自己写了一个比较简易的demo,便于让大家理解。 此篇博客意在让对启动模式不了解的开发者对其有一个较为形象的认识,至于深入探究,笔者还是推荐去看任玉刚前辈所写的《android开发艺术探索》了。 网上对Activity的启动模式讲解的博客有很多,但是大部分都需要掌握“栈”的知识,而且很多并不是那么通俗易懂。笔者打算独辟蹊径,一方面通过百度地图讲其作用,另一方面通过自己写的demo演示来讲解4种启动模式。

2016-03-19

android ContentResolver的使用(获取和修改联系人信息demo)

ContentProvider和ContentResolver永远是相对的,本章主要是讲ContentResolver的使用,当然是在android系统提供ContentProvider的情况下。 ContentProvider与ContentResolver概念上的东西的就不讲了,主要讲一下ContentResolver的作用以及使用方法。 ContentResolver的作用: 1、可以通过ContentResolver来获取android内部的数据,比如联系人信息、系统的多媒体信息、短信信息等等。 2、可以获取提供了ContentProvider的应用的数据。 ContentResolver的使用方法:(参考《疯狂Android讲义第三版》446面) 1、调用Context的getContentResolver()获取ContentResolver对象。 2、根据需要调用ContentResolver的insert(),delete(),updata(),query方法操作数据库。 3、为了操作系统提供的ContentResolver,需要了解该ContentProvider的Uri,以及该ContentProvider所操作的数据列的列名,可以通过查阅Android官方文档来获取这些信息。 笔者个人意见: 1、建议新手读者在学完SqLite之后再来学习ContentResolver的内容,ContentResolver的insert(),delete(),updata(),query四个操作数据库的方法均与SQLite中的相同。 2、ContentProvider的Uri,以及该ContentProvider所操作的数据列的列名都不需要死记硬背,需要用的时候查阅一下即可,新手此处最好能自己全部写一下,对ContentResolver的使用有一个总体的了解。

2016-04-07

android canvas\paint\path简单使用(自定义view必学)

最近学到自定义view,也是涉及到了canvas、paint、path的使用,此内容比较简单。 此三者一般会在自定义view的onDraw()中用到: canvas:决定view的布局(位置,画布颜色,形状) paint:决定view的属性(颜色,字体大小,风格) path:路径(path的用法深入比较复杂,此处由于是入门,就不多加阐述混淆新手了)

2016-04-01

android RecyclerView布局真的只是那么简单

RecyclerView是什么? 笔者个人看法,RecyclerView只是一个对ListView的升级版,这个升级的主要目的是为了让这个view的效率更高,并且使用更加方便。 我们知道,ListView通过使用ViewHolder来提升性能。ViewHolder通过保存item中使用到的控件的引用来减少findViewById的调用,以此使ListView滑动得更加顺畅。但这种模式在listview中即使不使用也无妨。 换言之,在ListView中你不考虑复用的问题也可以,只是你牺牲了内存来方便了代码。但是RecyclerView就不允许你这么做了,你使用RecyclerView就意味着你一定要复用,而效果上其实和ListView+ViewHolder差不多。

2016-04-18

android nextFocus使用详解

近期在学习android官方sample,学习到nextFocus的时候花了一些时间,并且也是觉得比较有用,所以拿出来分享。 效果:

2016-02-26

android Fragment与Activity交互,互相发数据(附图详解)

笔者近期看官方training,发现了很多有用又好玩的知识。其中,fragment与Activity通信就是一个。 fragment与Activity通信主要是两点: 1、fragment传递信息给Activity 此点是通过在fragment中定义接口与Activity共享数据。 2、Activity传递信息给fragment 此点主要是通过fragment的getArgument()和setArgument()两个函数传递bundle来传递。

2016-03-26

android 滑动删除的listview(自定义view)

本篇文章算是对郭霖前辈的一篇文章的详述: 一方面是笔者自己尝试从demo中理解了一下自定义view,另一方面是笔者希望通过更详细的注释已经解说,能帮助新手更容易地理解自定义view的使用。

2016-03-29

学生宿舍管理系统 学生宿舍管理系统

【题目】学生宿舍管理系统 考查点:线性结构、文件操作 注意:必须使用文件存储数据,不得使用数据库管理系统。 任务:通过此系统可以实现如下功能: 录入: 可以录入宿舍情况,包括宿舍号、可容纳学生数、已容纳学生数、男生/女生宿舍等信息; 可以录入学生住宿情况,包括学号、姓名、性别、宿舍号等信息。 其他信息可以自行设计。 分配宿舍:为每一个学生分配入一个未住满的宿舍。能否提供一个智能分配算法?推荐选择?批量分配?鼓励创新。 调换宿舍:实现一个学生调换宿舍操作以及两个同性学生互换宿

2016-03-04

实验三 数值积分(android)

实验二博客地址:http://blog.csdn.net/double2hao/article/details/51217356 实验一博客地址:http://blog.csdn.net/double2hao/article/details/51152843 一、实验内容 分别写出变步长梯形法和romberge法计算定积分的算法,编写程序上机调试出结果,要求所编程序适用于任何类型的定积分,即能解决这一类问题,而不是某一个问题。 试验中以下列数据验证程序的正确性。 求 (sinx)/x的积分,积分区间为[0,1]

2016-05-08

实验四 常微分方程的数值解

实验一博客地址:http://blog.csdn.net/double2hao/article/details/51152843 实验二博客地址:http://blog.csdn.net/double2hao/article/details/51217356 实验三博客地址:http://blog.csdn.net/double2hao/article/details/51344145 【实验内容】 分别写出改进欧拉法与四阶龙格库塔求解的算法,编写成熟上机调试出结果,要求所编程序适用于任何一阶常微分方程的数值解问题,即能解决这一类问题,而不是某一个问题。 试验中以下列数据验证程序的正确性。 求 y'=-xy^2 y(0)=2 (0<=x<=5) 步长h=0.25

2016-05-11

残缺棋盘 android实现颜色填充

原“残缺棋盘”题目: 残缺棋盘是一个2^k*2^个方格的棋盘,其中恰有1个方格残缺。图中给出,其中残缺部分用阴影表示。 这样的棋盘称为"三格板",残缺棋盘问题就是用这四种三格板覆盖更大的残缺棋盘。再次覆盖中要求: (1)两个三格板不能重复。 (2)三格板不能覆盖残缺棋盘方格,但必须覆盖到其他所有的方格。 添加要求: 使用图形化界面实现颜色填充残缺棋盘

2016-05-17

C++ 中文API文档

C++ 中文API文档

2016-03-04

android RecyclerView布局

android RecyclerView布局 博客地址 :http://blog.csdn.net/double2hao/article/details/51177594 笔者个人看法,RecyclerView只是一个对ListView的升级版,这个升级的主要目的是为了让这个view的效率更高,并且使用更加方便。 我们知道,ListView通过使用ViewHolder来提升性能。ViewHolder通过保存item中使用到的控件的引用来减少findViewById的调用,以此使ListView滑动得更加顺畅。但这种模式在listview中即使不使用也无妨。 换言之,在ListView中你不考虑复用的问题也可以,只是你牺牲了内存来方便了代码。但是RecyclerView就不允许你这么做了,你使用RecyclerView就意味着你一定要复用,而效果上其实和ListView+ViewHolder差不多。

2016-04-22

android RecyclerView布局真的只是那么简单!

笔者个人看法,RecyclerView只是一个对ListView的升级版,这个升级的主要目的是为了让这个view的效率更高,并且使用更加方便。 我们知道,ListView通过使用ViewHolder来提升性能。ViewHolder通过保存item中使用到的控件的引用来减少findViewById的调用,以此使ListView滑动得更加顺畅。但这种模式在listview中即使不使用也无妨。 换言之,在ListView中你不考虑复用的问题也可以,只是你牺牲了内存来方便了代码。但是RecyclerView就不允许你这么做了,你使用RecyclerView就意味着你一定要复用,而效果上其实和ListView+ViewHolder差不多。

2016-04-18

为RecyclerView添加FootView和HeadView

上一篇文章已经介绍过了RecyclerView的基本使用方法,原文如下:[android RecyclerView布局真的只是那么简单!](http://blog.csdn.net/double2hao/article/details/51177594)此篇文章算是对RecyclerView更深使用的介绍。 FootView和HeadView在ListView中的本身就有相对应的函数,但是在新潮的RecyclerView中却没有了,FootView在分页加载(上拉在家更多)中起着很重要的作用,因此也必须要学习一下了。(HeadView的添加与FootView的添加相比大致一样,在此就只讲FootView的添加了)

2016-10-11

最简易的网络框架封装(新手可看)

网络通信在Android上的重要性就不多说了。 demo就是获取到“https://www.baidu.com/”的HTML代码后显示在textview中。 如果仅仅实现这个功能需要的java代码绝对在10行以下,但是本片主要是讲一下简易框架的封装。 封装目的: 1、在同一个项目中,我们要执行网络操作可定不想要每次都编写一遍HTTP请求的代码。通常情况我们都会将这些网络操作提取到一个公共的类里面,并提供一个静态方法,

2016-09-07

给自定义View添加xml属性

笔者之前已经写过了一些自定义View的文章,在此对其也就不从头说起了,如有兴趣的读者可以看一下笔者的前两篇文章。 [android 自定义view的使用(最佳demo——返回标题栏)](http://blog.csdn.net/double2hao/article/details/50209249) [android 自定义控件(底部icon点击效果)](http://blog.csdn.net/double2hao/article/details/51093896) 笔者之前的文章中仅仅介绍了如何使用自定义View以及为什么要使用自定义View等等,但是在实际操作中,我们还是希望自定义View之后,直接能够在xml中就对其进行操作,如下图:

2016-08-04

完全理解android事件分发机制

#前言 之前笔者其实已经写过事件分发机制的文章:[快速理解android事件传递拦截机制概念](http://blog.csdn.net/double2hao/article/details/51541061) 但是,现在看来其实更像是一篇知识概括,多出可能未讲清楚,于是打算重写事件分发,用一篇文章大致讲清楚。 首先,形式上笔者最先思考的是使用源码,此者能从原理上讲解分发机制,比起侃侃而谈好得多。但是源码的复杂往往会让新手产生畏惧难以理解,于是笔者最终还是打算使用实例log来让读者理解android事件分发。 #重要函数 笔者此次主要提及最常用的几个函数: (其间区别看源码很容易理解,此处直接给上结果) **onClick():**这个函数是是View提供给我们的OnClickListener这个接口中的函数,在这里可以自定义对点击事件的处理逻辑。会在onTouchEvent()中进行调用。 **onTouch():**这个函数是View提供给我们的OnTouchListener这个接口中的函数,在这里面可以自定义对触摸事件的处理逻辑。 **onTouchEvent():**这个函数是view内部的触摸事件的处理方式,其间包括获取焦点,调用onClick()等等。 **dispatchTouchEvent():**这个是View的事件分发函数,在ViewGroup中进行重写。在View中其间会调用onTouchEvent(),在ViewGroup中其间会调用onInterceptTouchEvent()和onTouchEvent()。 **onInterceptTouchEvent():**这个函数是事件拦截函数,是ViewGroup才有的函数。

2017-01-12

RecyclerView超简单demo(局部更新取代ListView)

回顾上一篇写RecyclerView的博客(android RecyclerView布局真的只是那么简单!)。笔者比较具体地讲了一下自己对RecyclerView的理解,但是可能知识点比较杂乱,部分新手读者还是无法领会其意。正好笔者最近学习到“局部更新”的知识点,在此就再附上一个更简单的demo了。 为何要实现局部更新? 很简单,就是要提高效率。很多时候在一个列表中,我们只会修改一条item,如果直接使用notifyDataSetChanged(),未免显得有点浪费资源了。 如何实现的局部更新? 在RecyclerView出来之前,ListView如果要实现局部更新,首先要自定义一个ViewHolder,其次要自己写一个局部更新的函数。整体的流程算不上复杂,但是确实不是很方便,开发者们都会不由得想,为什么不直接官方就把这个写好啊。(ListView局部更新的例子在网上有很多,笔者在此处就不多加阐述了。) 然而,RecyclerView的出现就是帮了开发者们一个大忙了,RecyclerView.Adapter自带局部更新的函数,不需要自己写。

2016-06-08

快速入门android AIDL(开启多进程并进行通信)

为何要开启多进程?主要有两种情况: 一、一个应用由于自身需要采用多进程模式来实现。比如播放器之类,如果仅仅在service中运行会影响主线程的响应速度,很可能会造成ANR;如果仅仅在子线程中运行,一旦开启该线程的Activity被杀死后,线程也被杀死,无法实现后台运行效果,更加不合理。而如果在另外一个进程中使用service后台运行,就显得十分恰当了。 二、由于android对单个应用所使用的最大内存做了限制,为了加大一个应用可使用的内存,所以通过多进程来获取多份内存空间。 本篇文章demo重点: 1、开启多进程 2、两个进程之间使用AIDL进行通信

2016-06-10

为RecyclerView添加分页加载(上拉加载更多)功能

上一篇文章已经介绍了如何为RecyclerView添加FootView,在此基础上,要添加分页加载的功能其实已经很简单了。 上一篇文章地址:[为RecyclerView添加FootView和HeadView](http://blog.csdn.net/double2hao/article/details/52787975)

2016-10-11

ASP.NET 个人信息注册页面,并跳转显示

#题目 新建一个MVC项目,利用HTML、CSS、JS、jQuery、Ajax、jQuery UI等技术设计一个个人信息注册页面。当点击“提交”按钮时,跳转到新的页面显示录入信息。 **基本要求:** 用户名为6-10个小写字母(小写使用正则式验证,且用户名不能为“wustzz” –用Ajax技术来检测);密码为6位数字,确认密码不一致时有提示;籍贯使用级联(jquery实现);Email必须符合Email格式;手机是11位(假设规定以1569开头);出生年月使用jQuery UI日历组件设置;图片要传递到新的页面显示。

2016-11-23

实验五 迭代法解线性方程组与非线性方程(android)

实验一博客地址:http://blog.csdn.net/double2hao/article/details/51152843 实验二博客地址:http://blog.csdn.net/double2hao/article/details/51217356 实验三博客地址:http://blog.csdn.net/double2hao/article/details/51344145 实验四博客地址:http://blog.csdn.net/double2hao/article/details/51372731 【实验内容】 分别写出高斯-赛德尔迭代法与牛顿迭代法的算法,编写程序上机调试出结果,要求所编程序适用于任何一个方程的求根,即能解决这一类问题,而不是某一个问题。 1、高斯-赛德尔迭代法求解线性方程组 [ 7 2 1 -2][x1] [ 4] [ 9 15 3 -2][x2] [ 7] [-2 -2 11 5][x3]=[-1] [1 3 2 13][x4] [ 0] 2、用牛顿迭代法求方程x^3-x-1=0的近似根,精确度<=0.00001,牛顿法的初始值为1.

2016-05-24

ASP.NET 电影票信息的增删查改

##题目 1、使用Code First技术创建一个Movie数据模型。 ``` public class Movie { public int ID { get; set; } //电影编号 public string Title { get; set; } //电影名称 public DateTime ReleaseDate { get; set; } //上映时间 public string Genre { get; set; } //电影类型 public decimal Price { get; set; } //电影票价 public string Rating { get; set; } //电影分级 } ``` 2、使用MVC相关技术实现数据的列表显示和新增功能。 3、完成数据的编辑、删除、明细和条件查询等功能。 4、完成如下查询: (1)查询尚未上映电影的信息 (4)查询票价在某个区间的电影信息

2016-12-14

学生信息管理系统2222

#设计目的 1、网上很少有关于SQLite简单综合项目的测试APP。 2、把自己所学的部分UI综合一下,希望能给新手一些帮助。 #涉及知识点 1、包括SQLite的增删查找等功能。 2、RecyclerView展示 3、SharedPreference保存密码,以及判别是否是第一次安装APP。(如果是第一次就录入测试数据) 4、简单的Menu操作

2016-09-23

FragmentTransaction使用全解

#前言 之前已经写过用Fragment做主界面以及Fragment与Activity通信的文章。两篇文章如下: [ndroid viewpager+fragment做主界面(超容易理解的demo!)](http://blog.csdn.net/double2hao/article/details/50450377) [android Fragment与Activity交互,互相发数据(附图详解)](http://blog.csdn.net/double2hao/article/details/50983820) 对于Fragment还剩FragmentTransaction没有具体讲到,此篇文章就讲一下FragmentTransaction的主要用法,也是对之前的回顾。

2017-03-03

android 实现FlowLayout 流线布局(自定义ViewGroup)

#项目目的 1、深化自定义View的概念 2、将MeasureSpec、View的绘制流程、Layoutparams等分散的知识点整合成一个demo。 #项目灵感 笔者经验也是有限,此文章主要借鉴张鸿洋前辈的博客。 原文地址:http://blog.csdn.net/lmj623565791/article/details/38352503 #项目预览 ![这里写图片描述](http://img.blog.csdn.net/20161018184251886) #主要涉及知识点以及相关链接 ###1、MeasureSpec [快速理解android View的测量onMeasure()与Mea

2016-10-18

Android单元测试-对Activity的测试

#前提概要 上一篇文章已经介绍了单元测试的作用和简单示例,如果不了解的读者可以先阅读上一篇[ Android单元测试-作用以及简单示例](http://blog.csdn.net/double2hao/article/details/77159380)。 这篇文章主要介绍常见的Activity中的测试。 #对Acitivity的测试 对于Activity,我们大致有两种测试需求: 1、在Activity正常启动后,查看界面布局是否正确,包括View的点击事件等是否正确。 2、需要在Activity启动前完成各种数据的部署,然后查看Activity的效果。 对于这两种需求,笔者分别做了两个示例

2017-08-14

android socket聊天室——也不仅仅是聊天室

#前提概要 笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对socket的使用却让笔者感觉socket强大无比,可以实现诸多功能。 #个人Socket体验 项目主要有关智能家居,需要实现多台手机同时对灯进行操作(开或者关),主要需要实现以下几点: 1、进入界面时获取所有灯的状态。 2、一台手机改变了灯的状态,其他的手机上可以有所显示。 3、硬件上改变了灯的状态(手动开关灯),所有手机上要有所显示。 此功能如果使用HTTP读取的方式实现就不太合适了。一方面客户端与服务器读取文件的同步性难以保证,即使保证了,也需要浪费大量性能;另一方面,类似笔者的这种项目功能服务器和客户端交互比较频繁,对“即时性”要求也比较高,用HTTP不仅性能消耗太大,而且难以保证“即时性”。 但是使用Socket就很容易实现了,主要逻辑如下: 1、每次进入界面与服务器建立Socket连接,并得到此时灯的状态 2、每次需要对灯进行操作的时候建立一个线程把灯的状态传递给服务器,服务器接收到之后,把该状态传递给每一个此时与服务器建立连接的客户端。

2016-11-21

从零开始写一个简单的ImageLoader框架

从零开始写一个简单的ImageLoader框架

2016-08-12

用Scroller完成一个简单的ViewPager

#涉及知识点 ##onMeasure和onLayout 此点若不了解可以参考郭霖前辈的文章: [ Android视图绘制流程完全解析,带你一步步深入了解View(二)](http://blog.csdn.net/guolin_blog/article/details/16330267) ##事件分发机制 此点可以参考笔者文章: [完全理解android事件分发机制](http://blog.csdn.net/double2hao/article/details/54374861) ##scrollTo和scrollBy **scrollTo:**以View的初始位置为起点进行移动 **scrollBy:**以View的当前位置为起点进行移动 ##TouchSlop 系统可以识别出的被认为是滑动的最小距离。如果大于这个距离则是滑动。 ##View.getScrollX() getScrollX()获取到的值是屏幕的最左侧在整个空间中所占位置的X值。 打个比方:View是一条6米的绳子,而屏幕只能看到2~4米的绳子。那么getScrollX()的值就为2。如果屏幕看到的是3~5米的绳子,那么getScrollX()的值就为3。 ##Scroller Scroller的使用主要为3步: 1、初始化Scroller 2、重写computeScroll()方法 computeScroll()是在View的draw的时候调用的,而invalidate会导致View重绘,所以在重写computeScroll()之后,我们要使用invalidate()来间接调用它。 过程为:invalidate()->draw()->computeScroll() 3、使用startScroll()开启滑动

2017-02-23

ListView异步创建View

异步创建View这种操作一般情况下是用不到的,包括笔者之前自学阶段也是闻所未闻。 这定然是突破了我们一般编程的思维——UI操作难道不是只能在UI线程中吗? 是的,UI操作只能在UI线程中,但是UI控件的操作却是可以异步执行的。 考虑一下以下需求: > 我们要展示一个ListView,ListView中的数据和布局都是我们网络获取的,我们预先并不知道。 以往的我们使用一个Listview一般都是为了展示一类布局相同的信息,这种情况下,我们可以通过adapter的getView()方法中的convertView来实现View的复用,使View不用反复创建。

2017-07-14

Android单元测试-对Activity的测试 [

前提概要 上一篇文章已经介绍了单元测试的作用和简单示例,如果不了解的读者可以先阅读上一篇 Android单元测试-作用以及简单示例。 这篇文章主要介绍常见的Activity中的测试。 对Acitivity的测试(源码在文章结尾) 对于Activity,我们大致有两种测试需求: 1、在Activity正常启动后,查看界面布局是否正确,包括View的点击事件等是否正确。 2、需要在Activity启动前完成各种数据的部署,然后查看Activity的效果。 对于这两种需求,笔者分别做了两个示例解说: 1、检测一个布局中的button和TextView是否正确。 2、从网络动态获取String到Activity界面显示,并且这个图片的URL是由Intent传递过来的。

2017-08-15

实验五 迭代法解线性方程组与非线性方程(android)1

实验一博客地址:http://blog.csdn.net/double2hao/article/details/51152843 实验二博客地址:http://blog.csdn.net/double2hao/article/details/51217356 实验三博客地址:http://blog.csdn.net/double2hao/article/details/51344145 实验四博客地址:http://blog.csdn.net/double2hao/article/details/51372731 【实验内容】 分别写出高斯-赛德尔迭代法与牛顿迭代法的算法,编写程序上机调试出结果,要求所编程序适用于任何一个方程的求根,即能解决这一类问题,而不是某一个问题。 1、高斯-赛德尔迭代法求解线性方程组 [ 7 2 1 -2][x1] [ 4] [ 9 15 3 -2][x2] [ 7] [-2 -2 11 5][x3]=[-1] [1 3 2 13][x4] [ 0] 2、用牛顿迭代法求方程x^3-x-1=0的近似根,精确度<=0.00001,牛顿法的初始值为1.

2016-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除