1、 p2p金融相关业务知识 什么是p2p金融 P2p金融当中的个人与个人2者之间的角色关系 了解p2p的起源 P2p金融借贷模式及发展现状 投资p2p金融的风险什么是P2P金融 P2P金融又叫P2P信贷 p2p:person to person; 信贷:信用贷款 P2P金融指个人与个人间的小额借贷交易,一般需要借助电子商务专业网络平台帮助借贷双方确立借贷关系并完成相关交易手续。P2P金融的角色关系信贷 =信用贷款,既然是信用贷款,那么就存在2个角色,一个是借款者,一个是借出者。在网络平台当中,借款者可自行发布借款信息,包括金额、利息、还款方式和时间,实现自助式借款.p2p金融业务当中,借款者和借
2、出者的关系是1对多的,1N;了解p2p的起源尤努斯:全名穆罕默德尤努斯(1940-06-28),孟加拉国银行家、经济学家,教授。开创和发展了“小额贷款”的服务,专门提供给因贫穷而无法获得传统银行贷款的创业者。孟加拉乡村银行(也译作格莱珉银行)的创建人。因为创建了这种“专门提供给因贫穷而无法获得传统银行贷款的创业者”贷款模式,1983年创建了,格莱珉银行,2006获得了诺贝尔和平奖.P2p金融借贷模式及发展现状借贷模式:主要有2种,一种就是线上网络平台(咋们开发的app软件),还有一种传统线下的P2P金融。发展现状:06年被创造到现在不到10年的时间,发展特别迅速,发展至今,中国的网络借贷平台已
3、经超过2000家,其中做的最有名的几家:宜信、人人贷、你我贷、金融宝等等。投资p2p金融的好处好处p2p金融发展快速的原因:1:对于投资者(借出者)而言,获得比存款到银行更高的收益。2:对于有资金需求的企业主(借款者)而言,在P2P金融信息服务平台仅靠点击鼠标输入相关信息就可完成借款申请、查看进度以及归还借款等操作,极大提高了企业主的融资效率。3:对政府相关部门来说,这种模式都是网上公开进行的,所有平台交易数据随时透明可查,在利息税收和借贷利率方面更能轻松监控和监管。4:对社会来说,这种模式提高了资金利用率,遏制了高利贷的滋生和蔓延,有利于经济发展和社会稳定。投资p2p金融的风险 风险: 跑路
4、 P2P公司跑路,这样的新闻经常会有,所以如果我们想作为投资者,通过p2p平台获利的话,就要选择行业标杆的公司(宜信),但总结来讲,入市虚谨慎。了解公司产品研发团队构成 产品+UI+开发+测试+运营 接口文档的输出产品研发流程 产品:统筹产品,制定总的作业周期,输出产品方案,交给UI UI: 设计,输出效果图、切图,交给产品经理审核,审核通过,产品通知开发团队。 开发: 项目经理+服务器+IOS+Android较完善的团队,项目经理根据产品的作业周期,指定开发周期,分工协作,然后就码代码 测试:测试开发提交的产品,测试通过,交给运营 运营:负责产品上线,宣传等相关工作。接口文档 什么是接口文档
5、开发阶段,服务器需要为移动端提供接口文档,方便统一接口访问规范.而在p2p金融产品中,接口当中的请求与返回参数通常都是需要加密进行的举例,我们公司的接口文档加密规则是(登录接口Md5加密、具体接口具体参数RSA加密) 输出接口文档的必要性对于移动端开发人员而言,服务器的同事提供一份接口文档是充分必 须的工作,因为我们所有对于发往服务器的请求就全部都有了明确参照。有经验的服务器开发人员都会提供接口文档。 举例关于加密 MD5加密 RSA加密RSA加密 什么是RSA加密 RSA加密算法是最常用的非对称加密算法 加密类型解释 对称加密 非对称加密 普及RSA加密小知识 RSA是1977年由罗纳德李维
6、斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。MD5加密 MD5加密的概念 MD5的全称是Message-Digest Algorithm 5,在90年代初由 MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。 它是哪种加密类型? 根据特点决定 MD5加密的特点 开发中如何使用MD5加密 MD5Utils工具类项目演示 项目演示 需求分析 绘制整体代码结构图项目演示截图1项目演示截图2需求分析App启动页-app欢
7、迎页-主界面主界面: 三大模块:首页,我要投资,我的资产 了解每一个模块要做的东西 绘制整体代码结构图1绘制整体代码结构图2绘制整体代码结构图3搭建代码整体结构 MainActivity的主布局分析绘制 Fragment的hide与show BaseActivity的抽取 放在抽取部分 公共头布局的绘制 AppLication类与UIUtils类的编写 AppNetConfig统一接口请求配置常量类 AppManager统一actiivty栈管理 App程序当中的全局异常捕获MainActivity的主布局分析绘制根据绘制结构图,MainActivity=4个Fragment+底部tab控制栏
8、布局绘制技巧:权重的使用Fragment的hide与show为什么进行Fragment的切换,不选择使用replace()来代替fragment?每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量。所以通过切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个,这样就能做到多个Fragment切换不重新实例化。BaseActivity的抽取什么是抽取:抽取:相同的行为做统一的实现,具体的行为细节做抽象定义。BaseActivity的抽取:将所有子类activity做的相同的事情抽取到baseAc
9、tivity当中做统一实现,然后将不同的部分进行抽象实现。公共头布局的绘制 为什么要绘制公共的头布局 通过效果图(项目演示),可以看到所有activity布局的头基本都是一样的,只有一些很小的部分不同,而这些不同的部分,完全可以通过代码设置解决掉,那么当每一个activity在绘制头布局的时候,只需要include同一个文件即可,而不需要在每一个activity所包含的布局内部再绘制一遍。AppLication类与UIUtils类的编写为什么需要这2个全局工具类,换言之,写这2个全部类有什么好处?Application类里获取的Context,handler对象可以被当前Module里的任何类
10、库引用到,而不必在需要用到的时候去new对象或者是通过构造传入。Application类里获取的主线程和主线程Id对象可以在当前Module任意的地方,判断当前代码是否运行在主线程当中,或者将一段代码指定在主线程当中运行。UIUtils:顾名思义,专门提供为处理一些UI相关的问题而创造的工具帮助类。每当需要将xml对象转换成view对象、Dp与px的单位转换、获取valuse当中的XX资源等都可以放在这里边,进行统一获取,而避免了每次都写了几行重复的代码去获取结果。AppNetConfig统一接口请求配置常量编写AppNetConfig常量类,可以非常方便直观的查看以及管理App中所有发起的服
11、务器请求信息,比如服务器切换开发阶段通常访问的都是测试服务器地址,而当开发完成,发包给测试人员测试的时候,就需要切换到正式服务器地址了。具体某个接口的访问地址当公司新来了XX开发人员,他想查看某个界面的数据信息是来自于哪个接口请求的时候,只需要知道有这么一个常量类,就非常简单了,而不需要去具体的activity当中去查找代码了。AppManager统一actiivty栈管理栈的概念:堆栈,专业术语上说,它是一种运算受限的线性表,限制是仅允许在表的一端进行插入和删除运算,注意是一端。这一端被称为栈顶,相对地,把另一端称为栈底。通俗解释:可以认为是一个水缸,是有缸底的,无论是进水还是出水,都只能从
12、一端进行。特点:先进后出App程序当中的全局异常捕获 认识UncaughtExceptionHandler UncaughtExceptionHandler接口用来捕获运行时未被程序 捕获异常. 获取与设置系统默认未捕获异常处理器 获取:Thread.getDefaultUncaughtExceptionHandler(); 设置:Thread.setDefaultUncaughtExceptionHandler(this); 自定义实现类处理程序运行时的未捕获异常 设计单例 application当中注册 非主线程当中进行消息处理首页模块 自定义Scrollview的伸缩回弹效果 viewp
13、agerIndicator类库的引入及使用 Viewpager与circlePageIndicator制作轮播图广告 自定义绘制动态圆环进度条 自定义ProgressBar进度条样式 9path背景图片的editText输入框自定义Scrollview的伸缩回弹效果 分析:画图+笔记+操作演示 关键思路: 布局加载完毕,获取操作的布局view 重写onTouchEvent触摸事件 关键Api方法: Rect normal = new Rect(); normal. isEmpty normal.set(left,top,right,bottom); inner.getMeasuredHeigh
14、t() getHeight() getScrollY();viewpagerIndicator类库的引入及使用 在android studio中引入一个library都是通过import module来完成的 步骤: 1:import mode 导入library库 2:project structure添加module库依赖搞定 *: 可查看library的build.gradle文件确保module类型确实是com.android.library添加module依赖截图Viewpager与circlePageIndicator 了解pageIndicator不同实现类的含义 tabPage
15、Indicator:tab选项卡指示器 circlePageIndicator:圆形指示器,通常用于 制作广播轮播图 用法是一样的,根据需求摆放圆点指示器的位置自定义绘制动态圆环进度条 分析效果实现原理 核心思路:绘制外圆+中间百分比文字+弧形进度圈 回顾自定义控件的自定义属性类型 reference、color、boolean、dimension、 float、integer、string、enum常用 圆环进度的自定义属性 在values文件夹中,创建attrs.xml文件,定义节点的xml资源 代码中获取自定义属性: TypedArray mTypedArray = context.ob
16、tainStyledAttributes(attrs, R.styleable.RoundProgressBar); . mTypedArray.recycle(); -? 为什么需要调用recycle()为什么在TypedArray后需要调用recycle1: 如果不调用 当我们没有在使用TypedArray后调用recycle,编译器会提示 “This TypedArray should be recycled after use with #recycle()”2: 调用recycle的原因 这个可能在面试的时候会用到自定义ProgressBar进度条样式 Style属性指定为水平样式,
17、默认是圆 style=“?android:attr/progressBarStyleHorizontal” ProgressBar指定一个drawable资源作为进度条的背景以及进度。 了解layer-list层级样式列表的用法9path背景图片的editText输入框 9patch工具的使用 示例制作一张9patch图片 示例写一个临时demo小程序显示9patch图片的使用我要投资 fragment当中使用tabPageIndicator嵌入3个可滑动的fragment Fragment当中使用tabpagerIndicator的样式无效问题 全部理财item布局绘制技巧 抽取baseAd
18、apter的三种适配器 xListview的引入及使用 飞入飞出效果自定义控件引入及使用 热门理财流式布局自定义控件编写Fragment中的tabPageIndicator Fragment当中使用tabPageIndicator管理viewpager,设置样式问题: 我们都知道viewpagerIndicator的样式是配置在项目清单文件中的activity节点属性的。 当tabPageIndicator被包含在fragment当中的xml布局当中引用时,很有可能就会导致样式无效问题。全部理财item布局绘制技巧个人总结布局绘制技巧: 从大到小 善用权重 *: 可借助画图工具绘制布局分析抽取
19、baseAdapter的三种适配器 直接extends BaseAdapter的默认适配器 仅抽象getView方法的简易父类适配器 -MySimpleBaseAdapter getView方法内部抽取而成的父类适配器 -MyBaseAdapterMySimpleBaseAdapter简易列表适配器简易抽取,仅抽象getView方法MyBaseAdapter深层抽取基类适配器 回顾抽取思想 相同的代码做统一实现,不用的代码做抽象实现 抽取思路 每一个listview适配器的getview方法内部代码做的事情不一样的地方其实只有2个; 一个是生成的子view类型不同;另外一个是各自view内部设
20、置数据的处理不一样,其它的缓存思想以及holder缓存view都是相同的代码。 缺点:不能使用butterknife代替findviewById了XListview的引入及使用 拷贝xlistview包的三个类库以及引用到的所有res目前资源 关键Api方法 飞入飞出效果自定义控件引入及使用 拷贝randomLayout资料包下的所有类 使用方法关键api方法调用: xml布局的自定义控件引用 代码适配器的设置热门理财流式布局自定义控件 分析实现原理 应用场景 热门推荐、热门标签啊比如脉脉App上的搜索职位标签。 GradientDrawable类的使用 StateListDrawable类的
21、使用GradientDrawable GradientDrawable的官方解释它是可以代替定义shape的xml资源的drawable,可以使用在一个button按钮的gradient渐变颜色属性上,或者backgrounds等等,使用代码定义的shape资源类。 关键Api方法 setColor(rgb) -填充颜色 setGradientType(GradientDrawable.RECTANGLE) -shape矩形 setCornerRadius(radius); -四周圆角半径 setStroke(1, strokenColor); -边框厚度与颜色StateListDrawabl
22、e StateListDrawable的官方解释 It can be defined in an XML file with the element,它可以被用来代替selector的xml资源使用 关键Api方法 addState -添加状态我的资产 登录功能(Md5加密) fastJson数据解析 用户头像的圆形处理 调用系统相册、拍照更改用户头像 支付宝支付集成(提现、充值功能) 手势密码的引入及使用 账户安全-toggle实现简易开关切换我的资产 退出登录功能 使用MpAndroidChart三方开源库绘制各种图表登录功能(Md5加密) 拷贝Md5Utils工具类 登录逻辑处理进入我的
23、资产fragment登录逻辑判断放在onStart()生命周期方法中因为oncreateView方法只会在创建fragment对象的时候执行,如果已经有了,不会执行,而onStart()在每次进入fragment界面的时候都会执行。FastJon数据解析 拷贝fastJson的jar文件到libs 根据服务器返回的json数据格式,定义bean对象 关键api方法 JSONObject jsonObject = JSON.parseObject(content); Login login = JSON.parseObject(data, Login.class); 优点 fastjson解析j
24、son数据不区分大小写.用户头像的圆形处理 查看服务器图片并不是圆形的 Poccasso中加载处理图片: 关键Api方法: paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);调用系统相册、拍照更改用户头像 调用系统相机拍照 Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, CAMERA); 调用系统相册Intent picture = new Intent(Intent.ACTION
25、_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(picture, PICTURE); 返回结果处理:onActivityResult();支付宝支付集成 支付方式 集成支付步骤 拷贝jar文件 拷贝alipay包下的所有类 参照sample例子调用Api完成支付支付方式 支付必须的三个重要信息订单的数据用户的支付宝账户和密码电商公司的支付宝账户 支付的前置条件 公司需要在支付宝申请账号 支付方式 依赖支付宝客户端 智能sdk(jar包接入)支付步骤 1:导入a
26、lipaysdk.jar、alipaysecsdk.jar、alipayutdid.jar 2:拷贝alipay资料包 3: 清单文件配置 4: 代码调用支付 手势密码的引入及使用 拷贝整个lock资料包*:类里边引用到的资源和图片根据自己项目需求变换 了解入口类 LockLoginActivity-验证手势密码入口界面 SetPasswordActivity-设置手势密码入口界面 手势密码的启动时机 到用户回到桌面,再次回到APP时 账户安全-toggle实现简易开关切换 ToggleButton控件 android系统提供的开发切换按钮 通过为它指定一个selector的状态选择器, 指定
27、checked不同状态使用的资源背景图片即可实现开发效果,当给button属性设置selector的xml资源时,它的backgroud需要设置为transparent. 如果不需要问题信息,text,textoff,textOn都设置为”。退出登录功能 退出登录的逻辑处理 清除登录保存的用户sp信息 清除登录保存的用户手势密码信息 清空sp信息API sp.clear().commit();MpAndroidChart三方库绘制各种图表 Android studio中 MpAndroidChart库library的导入 Build.gradle项目依赖错误修复 导入sample module
28、运行示例工程。 研究sample中的代码绘制需求的3种类型图 表 折线图 柱状图 饼图MP折线图绘制 在需要绘制的xml布局内引用绘制类型的mp自定义控件 拷贝sample中代码设置具体图表数据及样 式 理解Api方法的意思MP柱状图绘制 Xml布局当中引入Mp要绘制的图表类型自定义控件 拷贝sample示例中的代码设置数据样式及属性 理解Api方法的意思MP饼图绘制 Xml布局当中引入Mp要绘制的图表类型自定义控件 拷贝sample示例中的代码设置数据样式及属性 理解Api方法的意思MpAndroidChart绘制总结 Api文档查询英文https:/ 步骤总结 findviewbyID获取
29、类型图表对象 设置图表属性 设置X、Y轴 设置数据源 启动绘制,并设置绘制完成时间 其它绘制图表的三方开源项目可扩展 Xcl-Chart更多 Textview的无限制跑马灯效果android:ellipsize=marqueeandroid:marqueeRepeatLimit=marquee_foreverandroid:singleLine=true“ TextView只有在获取焦点后才会滚动显示隐藏文字,重写isFocused方法,返回true,可设置跑马灯无限循环,一直在那跑其它 App启动页处理 App欢迎页(引导)界面处理 baseFragment的抽取 不同界面状态对应不同显示界
30、面通用loadingPage抽取App启动页处理注意AnroidMainActiivity的入口activity处理App欢迎页(引导)界面处理 只会在第一次安装启动App的时候出现 可设置切换动画baseFragment的抽取 铺垫引入抽取 eg:鼠标举例,借用上归类语言思想 陈述抽取概念 分析相同与不同,进行抽取(统一实现和抽象实现)loadingPage抽取 分析抽取动机 任何一个view界面展示都有4中情况: 1:正在加载;2:加载成功,但无数据;3:由于网络原因,不能与服务器正在通讯,无法加载数据;4:加载成功; 自定义fragmeLayout抽取公共通用view界面类 loadingPage。项目关键知识总结 自定义控件 Fragment的使用 viewpageIndicor、mpAndroidChart三方开源库的使用 资料保存,方便实现效果 抽取思想 第三方支付集成 金融行业知识了解 结合application设置全局异常捕获