学线移动第一次例会
学线移动第一次培训 1.作业点评 略 2.细说MVC架构与项目分包 参考: https://zh.wikipedia.org/wiki/MVC https://draveness.me/mvx/ https://blog.csdn.net/qq_39218605/article/details/80779349?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1 参考文献http://www.dgp.toronto.edu/~dwigdor/teaching/csc2524/2012_F/papers/mvc.pdf 基本概念 我们将应用程序划分为三种组件,模型 - 视图 - 控制器(MVC)设计定义它们之间的相互作用。 在上面那篇论文中是这样描述这三部分的: In the MVC paradigm the user input, the modeling of the exter ...
网络的异步与okhttp
对于网络请求,按照平常我们的逻辑去写的时候,往往会出现这样的问题 为啥会是null呢?有很多同学来问过,我也跟他们解释过,无论是哪种程序,网络请求的执行,一定是特别耗时的操作(相较于我们执行其他平常的程序语句)毕竟打游戏都还有延迟呢,所以很容易出现这种情况,而如果你的程序下一步恰好开始直接对获取的JSONObject进行解析等操作,那么你的APP一般会直接崩溃。 所以怎么解决呢?其实也很简单,一方面,我们满可以让程序在进行网络请求的时候停下等网络请求执行完获取到返回的数据,也就是同步请求,但是谁要是敢这么干,立即打死。另一方面,可以等数据返回后再重新刷新界面,相当于在网络线程中进行请求,也就是我们okhttp用的.enqueue(callback)方法。 PS 但是首先我觉得有必要说明白OkHttp的异步机制,我讲过,OkHttp会自动帮我们开新线程,指的就是我们在异步执行一个请求的时候开启的新线程。所以请求传入的callback回调中的代码其实都是在这个新线程里执行的。而这个线程会最终拿到网络请求的返回数据,所以我们要做的就是在拿到返回数据的callback里更新UI。 机制解析 ...
我的2021华为开发者大会
前言 有一说一真的没有想到今年能有机会参加这次盛会,真的是惊喜。 作为一名开发者,一名安卓开发者,一名资深(大概)花粉的安卓开发者,能够来到华为在东莞的小镇真的是万分荣幸。 来之前也想过好多,对未来的规划也好,对知识的期许也罢,其实都是满满的期待罢了。 历程 The first day 飞机加入住手续,虽然有些繁琐,但是疫情之下还是要保护好自己。 在酒店里体验了一把智能家居,真的感受到了万物互联的一些魅力与便捷。 The second day 一大早起床来到三丫坡签到,虽然有些迷糊但还是很激动。 进入活动会场(好大) 然后就跟大佬们一起去做codelabs,上手体验华为各种开放能力的开发。其实感觉codelab还是蛮简单的,不过第一天不太熟悉,像个没头苍蝇一样乱撞,体验到了一些自己感兴趣的能力,尤其是一些我比较熟悉的HMS相关服务,不过也挑战了特别多几乎没有接触过的知识,比如3D建模能力,sense渲染能力,HIAI开放能力,甚至现学华为推出的eTS(extended TypeScript)语言然后现卖(指修bug),了解了一些前端的最新的开发规范,甚至受现场的一位老师邀请当 ...
离散:3.欧拉图与哈密顿图
定义1 设G是一个图,G中包含所有边的通路/迹(即每条边恰好出现一次的路径)称为Euler通路/迹,闭的Euler迹称为Euler闭迹或Euler回路; 具有Euler回路的图称为Euler图,开的Euler迹称为Euler开迹,具有Euler开迹的图称为半Euler图。 Terminologies: Euler Circuit(欧拉回路):An Euler circuit in a graph G is a simple circuit containing every edge of G. 欧拉回路,是包含着G的每一条边的简单回路 (回路,即闭迹) 设 v0e1v1e2v2…ekvkv_0e_1v_1e_2v_2…e_kv_kv0e1v1e2v2…ekvk 为图G中的一条路径,若边e1,e2,…,eke_1,e_2,…,e_ke1,e2,…,ek 互不相同,则称该路径为迹;若点序列v0,v1,…,vkv_0,v_1,…,v_kv0,v1,…,vk互不相同,则称该路径为路。 Euler Path(欧拉通路):An Euler path in G ...
离散:0.图的概念和术语
图的概念: 1、图的定义: 一个图G=(V,E)由顶点的非空集V和边的集合E构成,每条边有一个或两个顶点与它相连,这样的顶点称为边的端点。边连接它的端点。 2、图的分类 无向图 简单图 简单图G=(V,E)是由非空顶点集V(有穷集)和边集E所组成的,V的不同元素的无序对称为边。简单图不存在环,且两个顶点间最多只有一条边 多重图 在简单图的基础上,多重图允许顶点对之间有多重边 伪图 伪图也是多重图,它可以存在环 有向图 有向图(V,E)是由非空顶点集V、边集E所组成的,边V中元素的有序对。允许有环(即相同元素的有序对),但不允许在两个顶点之间有同向的多重边。 有向图 简单有向图 有向多重图 有向多重图G=(V,E)是由非空顶点集V、边集E组成的,其中可以存在多重边 混合图 图的术语: degree of a vertex (顶点的度) 在无向图里顶点的度是与该顶点关联的边的数目,例外的情形是,顶点上的环为顶点的度做出双倍贡献 顶点v的度记做deg(v) If deg(v) = 0,v is called isolated ...
第三次培训:网络部分
补充:项目分包的问题 项目分包,其实跟电脑分文件夹归类是一个道理。如果大家类比较少,不分包也就算了,但如果像这样: 不分包你半天都找不到你想找的那个类。 所以还是有必要介绍一下项目分包(架构)的问题,对大家大一下课设也有很大帮助。 MVC: 就给大家介绍一下最简单的MVC: MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式透过对复杂度的简化,使程序结构更加直观。软件系统透过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以依据自身的专长分组: 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管 ...
设计原则与MaterialDesign基础原则
基础设计原则: 一旦你能够说出什么东西的名字,就会很容易注意到它。你就会掌握它,拥有它,使它在你的控制之中。当我们没用听说过一些设计的概念,我们就很难会注意到一个设计作品上的问题、缺漏,更不可能做出良好的设计。 对比(Contrast) Robin对比原则指出:页面上的不同元素之间要有对比效果,达到吸引读者的对比效果。 原理: 页面上的不同元素会存在关联性和差异性,对比原则倡导通过视觉元素的对比来表现这种差异性。对比原则要解决的问题是如何更好的吸引用户的眼球,以及如何更好的为用户展现不同信息的重要程度。如果元素(字体、颜色、大小、线宽、形状、空间等)不相同,那就干脆让它们截然不同。对比能够让讯息更准确的传达,内容更容易的被找到、被记住。 对比不仅可以用来吸引眼球,还可以用来组织信息、清晰层级、在界面上指引读者,并且制造焦点。 样例: 比如: 又比如: 为什么暂停、上下曲目按键是白色实心button而其他button不仅小而且还是灰色的?QQ音乐使用这种对比突出button层级与重要性。而曲名与其余信息也有明显对比。 反面教材: 背景图片导致的hint文字看不清,两者对比度 ...
typora插入数学符号与公式
公式块与行内公式的添加 先在偏好设置里面打开公式输入,然后重启Typora 这个齐,下文中找不到就去这里面:https://blog.csdn.net/YuYunTan/article/details/83617781 以及官方文档:https://katex.org/docs/supported.html 颜色 avsRkneavs{\color{Emerald}R_k}neavsRkne :avs{\color{Emerald}R_k}ne 常用公式代码 用{}包裹的表达式会被看做一个整体 上下标,正负无穷 式子作为下标:ax+ya_{x+y}ax+y – a_{x+y} 加减乘,分式,根号,省略号 点乘:a \cdot b a⋅ba \cdot ba⋅b 叉乘:a \times b a×ba \times ba×b 上下取整 ⌈x⌉\lceil x \rceil⌈x⌉ : \lceil x \rceil ⌊x⌋\lfloor x \rfloor⌊x⌋ :\lfloor x \rfloor 三角函数 矢量,累加累乘,极限 希腊字母 希腊字母 latex ...
离散:1.图的表示和同构及连通性
图的表示: 邻接表 邻接矩阵(无向图的邻接矩阵总是对称的) 图的邻接矩阵依赖于所选择的顶点的顺序。因此带n个顶点的图有n!个不同的邻接矩阵,因为n个顶点有n!个不同的顺序。 当图里的边相对少时,邻接矩阵是稀疏矩阵,即只有很少的非0项的矩阵。可以用特殊的方法来表示和计算这样的矩阵。 邻接矩阵也可以表示带环和多重边的无向图,把顶点aia_iai上的环表示成邻接矩阵(i,i)位置上的1。当出现多重边时候,邻接矩阵不再是0-1矩阵,这是因为邻接矩阵的第( i,j)项等于与{aia_iai,aja_jaj}关联的边数。包括多重图与伪图在内的所有无向图都具有对称的邻接矩阵 对无向图来说,邻接矩阵每一行各个位置上数字之和代表什么? 等于顶点i的度减去在顶点i上的环数 对于有向图而言,邻接矩阵每一行各个位置上数字之和代表什么?代表该顶点的出度 deg+(vi)deg^+(v_i)deg+(vi),每一列各个位置上数字之和代表什么?代表该顶点的入度 关联矩阵 图的同构 怎么判断两个简单图是否同构? 相同不变量: 相同的顶点数 有相同的边数 连 ...
绘制:path基础与贝塞尔函数
以flutter为例的path基础讲解: 路径形成的基础方法: 图源Flutter 绘制指南 - 妙笔生花,下面案例同, moveTo:将画笔起点移动到给定坐标 relativeMoveTo:相对当前画笔起点坐标将画笔起点进行dx与dy的平移 lineTo:从画笔起始点画直线到给定坐标 relativeLineTo:在起始点与相对起始点dx、dy距离的点之间画线 flutter的圆弧都是以矩形的内接椭圆截取绘制而来的,所以下面的画弧的方法会传入Rect arcTo: 12345678910111213141516171819202122232425262728//rect: 圆弧所在矩形//startAngle : 开始弧度//sweepAngle : 需要绘制的弧度大小//forceMoveTo : 如果“forceMoveTo”参数为false,则添加一条直线段和一条弧段。//如果“forceMoveTo”参数为true,则启动一个新的子路径,其中包含一个弧段。Path path = Path();Paint paint = Paint() ..col ...
绘制:安卓原生(二、Region)
安卓原生Region: 今天没有讲flutter,貌似,flutter并没有与之对应的内容。 Region,中文意思即区域的意思,它表示的是canvas图层上的某一块封闭的区域。 你可能会问,既然已经有canvas,为什么还要有region? 这是因为,安卓原生的组件无法像flutter那样,通过使用GestureDetector或者GestureRecognizer对组件进行包裹从而非常方便的实现控件的手势控制,而是要进行实例化与调用,那么在自绘组件的时候如何实现手势控制呢?这其实就是region的功能之一了。 首先放上基本上所有的API: 123456789101112131415161718192021222324252627282930313233343536373839404142434445/**构造方法*/ public Region() //创建一个空的区域 public Region(Region region) //拷贝一个region的范围 public Region(Rect r) //创建一个矩形的区域 public Region(int left, in ...
JetBrains系列常用快捷键汇总
引言: 作为一名资深咸鱼,美观强大的编译器一直是我的追求,所谓工欲善其事必先利其器,当然了,也要学会高效地使用编译器,才能讲编译器的优点最大化。磨刀不误砍柴工,下面汇总一些JetBrains家IDE的常用快捷键与设置。 快捷键汇总: 首先,在网上看到有人推荐Key Promoter X 这款插件,当你使用鼠标和菜单项时,这个插件会提示相应的快捷键。我刚安装,先试试水。 导航类快捷键 Ctrl + Tab(^ Tab) —— 切换标签页(特别好用) 快速切换打开的文件。按住 Ctrl 键不释放时可以在打开文件列表中逐个移动,释放时会切换到相应文件。 Ctrl + B (⌘ B) —— 跳转到声明/实现 在某一方法处按此快捷键,会跳转到该方法的声明处,例如,对应的接口。相反,按下 Ctrl + Alt + B(⌘ ⌥ B)不会跳转到接口,而是跳转到接口的实现,很多时候这能节省不少时间。 按两下 Shift(⇧⇧) —— 搜索任意内容 快速点按两下 shift,快速搜索项目中的任意内容,包括文件、行动、类在内的任意内容。 Ctrl + N (⌘ O) —— 查找类 如果已知需要查找的是类, ...
绘制:安卓原生与flutter(一、引言与绘图)
先放上 安卓大佬 和flutter大佬镇楼 引言:我为什么要学绘制 其实对于flutter来说,自绘的需求并不是很大,尤其是组件的自绘,一方面,flutter的组件就是依据MaterialDesign风格绘制的,本来就很好看,另一方面,一些复杂的组件也完全可以通过组件组装的方式进行构建,比自绘要省事。但这并不意味着flutter没有自绘组件的需求,一些高度自定义的组件(比如QQ编辑图片的时候能在图片上贴表情或者加文字时显示的文字框以及文字输入框的拖动缩放旋转等等等等)还是需要我们去自绘组件的。 不过对于安卓原生嘛,嘿嘿,就开始离谱了。原生组件UI也不算。。特别丑,但是相较于flutter来说,高下立判。一方面,原生组件最好还是不要直接拿来用,还是建议进行封装。另一方面,原生的动画效果做的并不比flutter好,而且组件也比较单一,都留给了自绘很大的发展空间(给开发者增加了工作量)。 以下内容选自张风捷特烈的小册Flutter 绘制指南 - 妙笔生花,我觉得说的挺好: 为什么要学绘制 打开你的手机、电脑、平板,你可视的所有的一切在本质上都是依靠绘制实现的 ...
学线oj思路讲解
学线,集合!(by zwn) 难度:简单 tag:数组,计算,送分题 又到了一年一度的迎新季,由于学线福利待遇好,又有新办公室,导致今年迎新展台异常火爆。孔站火速召集学线同学前来帮忙。现在把前来帮忙的同学的位置标记在数轴上,每个同学的位置也存在数组 locate 当中。 孔站可以对 任何同学 执行下面两种操作之一(不限操作次数,0 次也可以): 将任意一个同学向左或者右移动 2 个单位,代价为 0。 将任意一个同学向左或者右移动 1 个单位,代价为 1。 输入数组locate,返回将所有同学移动到同一位置(任意位置)上所需要的最小代价。 最开始的时候,同一位置上也可能有两个或者更多的同学哦。 输入样例 1[1,2,3] 输出样例 11 1解释:第二个筹码移动到位置三的代价是 1,第一个筹码移动到位置三的代价是 0,总代价为 1。 思路:最基础的贪心思想 贪心算法: (英语:greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那 ...