学线培训:winter-flutter-1
Widget 简介(了解) Widget 概念 在前面的介绍中,我们知道在Flutter中几乎所有的对象都是一个 widget 。与原生开发中“控件”不同的是,Flutter 中的 widget 的概念更广泛,它不仅可以表示UI元素,也可以表示一些功能性的组件如:用于手势检测的 GestureDetector 、用于APP主题数据传递的 Theme 等等,而原生开发中的控件通常只是指UI元素。在后面的内容中,我们在描述UI元素时可能会用到“控件”、“组件”这样的概念,读者心里需要知道他们就是 widget ,只是在不同场景的不同表述而已。由于 Flutter 主要就是用于构建用户界面的,所以,在大多数时候,读者可以认为 widget 就是一个控件,不必纠结于概念。 Flutter 中是通过 Widget 嵌套 Widget 的方式来构建UI和进行实践处理的,所以记住,Flutter 中万物皆为Widget。 Flutter中的树(比较抽象,尽量理解即可) 既然 Widget 只是描述一个UI元素的配置信息,那么真正的布局、绘制是由谁来完成的呢?Flutter 框架的的处理流程是这样的: ...
2022:new_year
正文 转眼一年半过去了,感觉也还算自由自在。没有什么太烦心的事,也算不上什么一帆风顺。 回首过去的一年,经历了好多,但要是想一一细数,却又那么朦胧难辨。倒不是说没有什么值得留念的,可能因为我并不喜欢追忆过往,往事如云烟,还是随它去吧。 只觉得,过去一年,浮浮沉沉,收获了很多东西,也不可避免地失去了一些,毕竟,我也在“磨损”。很庆幸身边有志同道合的伙伴,手头有自己享受的工作。 未来的路想怎么走,还不好说,感觉还是比较茫茫然,虽然日常真的很喜欢看稚晖君,不过基本是不会追随他的步伐了,(毕竟栈溢出工程师也不是人人都能成的),感觉手头还有很多东西要学,OpenCV,JVM,安卓与flutter底层原理与渲染机制,动画与绘制原理…反正是多的数不过来,大概也会有所取舍。其实还是很庆幸保留了自己的一点小脾气,只学自己喜欢的,不喜欢的就猛摆烂,怎么说。。。。。有利有弊吧。 如果你问我,我的人生会如何规划,那我肯定也不知道。不过估计也没多少人会这么关心我,而且就算知道,我自己大概也不会理会,甚至直接背道而驰。新的一年,我只希望能够平安顺遂,有风有浪。其实这么多年,结交的朋友也不少,但真正留在身边的 ...
后端数据过期的处理策略
课设中涉及对过期需求的自动处理(自动设置状态为超时),其实日常生活中也有很多相类似的问题,比如订单签收后若买家没有确认收货则要在24小时后自动确认,或者QQ每到周一早上的一个固定时间就会给用户发送上周QQ空间的访客情况,老师要设置作业的截止日期,过期学生就不能使用提交作业的功能。 其实个人总结了一下大致可以分为两类任务,一类属于延时任务,比如订单的24小时自动确认收货,另一类属于定时任务,比如在某个特定的时间给用户发送报告,课设中的任务其实就是一个定时任务,而类似的问题其实在个人课设中也有出现。 不过不同的是个人课设中的选课时间功能完全可以简化处理,即在学生进行选课操作时检查当前时间与规定时间,并对超时请求进行拦截以达到显示超时的目的。但此次团体课设则不同,此次团体课设要求检查的是截止日期是否超时,并对超时的需求执行对应的操作,主要考虑到高效性与实效性,并不能简单地通过前端请求进行拦截。 基于此,我设计了三种方案,三种方案优缺点各异,但在横向与纵向的比较之中带给了我很大的启发。 数据库轮询 第一种是对数据库进行定期轮询,即通过一个线程定时的去扫描数据库,通过当前时间来判断是否有超时的需 ...
学线移动例会:git
前言:为什么要有git与GitHub&Gitee 1.起源 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。 Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢? 事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码! 你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。 不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,Bi ...
数据结构实验八:图
1、 创建图类,存储结构使用邻接矩阵。 2、 输入图的节点数n(小于10个)、边数m,节点分别用1-n代表。 3、 采用“起始节点,终止节点,权值”输入图的m条边,创建图。 4、 输出从节点1开始的BFS遍历,在遍历过程中,如有多个可以选择的节点,则优先选择编号较小的节点。 5、 输出从节点1开始的DFS遍历,在遍历过程中,如有多个可以选择的节点,则优先选择编号较小的节点。 6、 输出从第1节点到第n节点最短路径的长度,如果没有路经,输出0。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271 ...
数据结构试验七:搜索树与堆
写的好乱。有空再整理吧 1、 输入一系列不为零的正整数(最多不超过20个),遇到0代表输入结束(不包含0)。 2、 根据上面输入的数据序列,用初始化方法创建最大堆(不要用节点依次插入的办法创建最大堆),然后输出最大堆的层次序列。 3、 输出用堆排序后的排序结果。 4、 根据上面输入的数据,创建二叉搜索树(关键字不允许重复,如遇重复,则不重复插入该关键字),输出二叉搜索树的前序序列、中序序列(分行输出)。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 ...
数据结构实验六:二叉树源码
1、 输入一个完全二叉树的层次遍历字符串,创建这个二叉树,输出这个二叉树的前序遍历字符串、中序遍历字符串、后序遍历字符串、结点数目、二叉树高度(上述每一个结果独立一行显示)。 2、 输入二叉树前序序列和中序序列(各元素各不相同),创建这个二叉树,输出该二叉树的后序序列、层次遍历。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150#include<ios ...
学线移动第一次例会
学线移动第一次培训 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 ...