日常碎碎念 2021.5.26

上周总结

  1. 阿里素质测评
  2. 体质测试
  3. 工作室会议
  4. 海底捞聚餐

1. 阿里素质测评。之前被阿里捞起来面试莫名其妙的,面试官也在问我为什么没有素质测评,因此HR面之后就被安排去把素质测评补上了。现在还在等HR的回复,真的是等的黄花菜都要凉了,好在有一个鹅厂保底,不然等待⌛️真的是一个煎熬的过程呐。

2.体质测试。下学期就要晋升为大四的学生了,时间过的真的是飞快,转眼间就要从大学的课堂中步入社会了,感觉大学很充实,时间也过的很快。唯一让我不爽的就是每年的体质测试了。每次立定跳远和引体向上都是不合格,真的是好伤心💔。好在通过努力,最后还是拿到了60分合格的成绩,但这段经历真的是太痛苦了。

3.工作室会议。跟大家讨论了工作室的看板娘的设计(虽然我们是技术向工作室,但看板娘也很重要啊!),被通知了剩下这段时间的日程安排,跟技术组的朋友们做了交流。虽然工作室远远没有达到我所预期的样子,但好歹是慢慢跑起来了,相信2-3年后,我们会起来的。

4.海底捞聚餐。这个纯属自己糊逼,跟舍友夸下海口说拿到鹅厂offer就请大伙吃海底捞。自己作孽啊,吃饭钱包👛在滴血🩸,QAQ。(不过海底捞的服务真的好好啊!)

本周计划

  1. 软件设计师考试
  2. 参加组织的换届大会
  3. 继续学习基础知识
  4. 继续准备雅思

实施情况

软考就要在本周六(5.29)进行考试,正在紧张的进行准备。目前感觉选择题应该是有把握拿到合格✅的,但下午的案例题,说实话还没个底。继续加油准备吧!今天是周三了,利用今天,明天,后天,不到3天的时间,用心准备一下,我相信还是能够通过的。

一年一度的换届大会又来了,虽然会占用晚上的时间,但感觉作为组织的一份子,还是不要缺席的比较好,去合影留个纪念,毕竟是作为在校的一段记忆,还是要珍重的。

继续学习前端的基础知识并且了解相关项目的实践。比如React Native,lowcode可视化编程的落地实施等方面的信息和知识。

继续准备雅思,原计划是6月中,6月底进行二战雅思的。但可惜计划赶不上变化,5月底软考,6月中六级,6月中下期末考,6月底要去租房子。整个6月的行程被安排的满满当当的,因此还是计划9月或者10月二战雅思(期盼这一次能一步到位到6.5分😂)。

结尾

希望在接下来的考试中能够取得一个出色的成绩吧!加油!

主题的一些小思考

最近重新燃起写Blog的斗志,就开始上来收拾了一下。其实感觉还是用回原生Wordpress提供的主题就已经足够好了。之前总是喜欢花里胡哨的主题,却忘记了写作的本心。现在换回这个原始的样式,希望能够把重心搬回内容创作上面。

近期做的一些小改动

  • ✅ 适配了深色模式
  • ✅ 卸载插件,加快加载速度
  • ⛔️ 准备迁移博客至支持HTTP 2.0的服务提供商

尾言

总的来说,就是懒得折腾了,没有当初折腾的那颗心了。感觉一切从简,才是最爽的,现阶段我的观点变成了,与其花时间装修,还不如好好摸摸🐟算了。(当然也有可能是最近几天的天气️☁️太热导致的完全不想动)

[笔记]小程序JS 变量的生命周期探究

序言

今天闲逛”小程序开发社区”,无意中看到有一个同行贴出了以下的一段代码。

https://developers.weixin.qq.com/s/mqa4fHme7ZnX

从A页面当中跳转到B页面,点击按钮后,再返回上一页就不能触发按钮对应的事件了。

探究代码

第一次渲染

第一次渲染成功时,用户点击setData测试,按钮能正常触发事件(按钮内容变成setData成功),点击”点击另外打开当前页面”按钮之后,跳转到新的页面。

跳转到第二个页面

此时nodeid发生变化,证实跳转到了新的页面。此时点击左上角的返回按钮后,原来的setData按钮无法触发事件。

分析输出

从代码中我们很容易就能分析出,第一次渲染成功时,that和this指向的页面nodeid应该是acf9ce91,当我们跳转到第二个页面时,此时的that和this就变成了bd622626。

此时神奇的事情就发生了,当我们点击返回按钮回到上一个页面,我们就能看到that的输出值依然是 bd622626 ,但this的输出值就变回了 acf9ce91.

返回第一个页面

由此我的一个想法是,跳转页面只会初始化一个新的页面实例,而不是重新运行这个JS文件.

证明想法

辅助代码

为了证明跳转页面后不是重新运行这个JS文件的想法,我在Page构造器的外部增加了如下的代码.

但我重新渲染页面时,console页面成功输出了2

证明第一次渲染时,小程序是运行过这个JS文件的。但当我们点击跳转到新的页面时,2没有继续出现,此时我认为小程序在新的页面当中,小程序是没有运行过这个JS文件的。

查阅文档

小程序为了实现对视图层标签的管控,开发了一套内置的框架”Exparser框架”。在该框架当中,页面的渲染是基于Exparser框架提供的Page和Component构造器的注入的数据的。

文档链接:https://developers.weixin.qq.com/ebook?action=get_post_info&token=935589521&volumn=1&lang=zh_CN&book=miniprogram&docid=0000aac998c9b09b00863377251c0a

暂时性结论

按照我的个人理解,启动的时候,小程序就已经提前把页面的模板注册好了。如果后面再次访问该页面时,仅仅是会基于页面模板创建出新的页面实例。也就是只有Page()构造器里面定义的data,在同一个页面下,实例与实例之间是独立的,但是Page外部定义的变量是共用的

后续

如果未来有能力的话,希望可以反编译一下小程序的基础库,从源码正向来理解小程序页面渲染的流程。

引用

  1. 教程|《小程序开发指南》
  2. 同一page页面重复打开时,页面js里声明的变量会互相污染?

你好,2021

四级更迭,时光流转,又一个按下了快进键的365天。告别2020年,感谢遇见你2021,还请多多指教。

过去的2020年,经历了新冠病毒的侵袭,经历了全民隔离,网课教学。2020年的上半年是黑白的,感觉时间都被暂停了。但多亏大家的努力,让2020年的下半年逐渐重返前进的轨道之上,希望2021年,能够牛转乾坤,为美好的生活继续努力。

2020年,我第一次参加了微信小程序全国高校大赛,取得了华南赛区三等奖。但这个奖不会是我的终点,它会继续激励我,向着更高的目标继续进发,希望能够在未来取得更好的成绩。从年初的0.0.1版的GCU课表+,一直迭代到今天的1.8.1版本,一年来我对这个小程序进行了上百次的更新,现在回头看真的是成就感满满,即学习到了开发方面的知识,交到了更多的好友,也帮自己争得了一个奖项,希望明年能够继续进步。

2021年,一个新的开始,一页新的篇章,下面是我短期(1-2月)的一个目标。

  1. GCU课表+ 功能增强
  2. 自制LL(1)文法的编译器
  3. 学会用Coco2dx制作小游戏
  4. 用库乐队做一个 trap beat
  5. 雅思考到6.5

希望一切都能如约而至,也祝福大家心想事成,学业进步,身体健康。

[回溯法] 迷宫问题

问题

思路

流程图

代码

#include "pch.h"
#include 
struct Point{
	int x;
	int y;
};

int main()
{
	int max_x = 0, max_y = 0;
	int maze_arr[100][100] = { 0 };
	scanf("%d %d", &max_x, &max_y);

	if (max_x * max_y <= 0) {
		printf("Wrong input!\n");
		return 0;
	}

	if (max_x * max_y == 1) {
		printf("No solution!\n");
		return 0;
	}

	for (int i = 0; i < max_x; i++) {
		for (int j = 0; j < max_y; j++) {
			scanf("%d", &maze_arr[i][j]);
		}
	}
	
	printf("\n");
	//第一个参数是控制行,第二个参数才是控制列
	

	int x = 0, y = 0;
	int k = 0;//步数索引
	int round = 0;

	Point path[100];//路径
	int flag[100][100];//是否走过
	int dir[100] = { 0 }; //搜索方向
	Point delta[4];//偏移量
	flag[0][0] = 1;
	while (true) {
		//0,0 第一列第0行
		//左边 0,-1 第0行第1列
		//右边 0,1 第0行第1列
		//上边 -1,0 第-1行第0列
		//下边 1,0 第1行第0列
		round = 0;//重置遍历次数
		//左方 0
		delta[0].x = x;
		delta[0].y = y - 1;
		//上方 1
		delta[1].x = x - 1;
		delta[1].y = y;
		//右方 2
		delta[2].x = x;
		delta[2].y = y + 1;
		//下方 3
		delta[3].x = x + 1;
		delta[3].y = y;
		for (int i = 0; i < 4; i++) {
			//不超出迷宫边界,即不小于0,不大于行/列
			if (delta[i].x >= 0 && delta[i].y >= 0 && delta[i].x < max_x && delta[i].y < max_y) {
				//不是墙,即所在格子值不为1
				
				if (maze_arr[delta[i].x][delta[i].y] != 1) {
					//没走过,即所在格子的flag值不为1
					if (flag[delta[i].x][delta[i].y] != 1) {
						
						//将偏移量delta加到当前坐标上
						x = delta[i].x;
						y = delta[i].y;
						path[k].x = x;
						path[k].y = y;
						//记录当前的搜索方向dir
						dir[k] = i;
						k++;
						//将当前位置的flag值标为1,表示已走
						flag[x][y] = 1;
						//是否最后一步
						if (x == max_x - 1 && y == max_y - 1) {
							//输出坐标
							printf("<0,0>\n");
							for (int j = 0; j < 100; j++) {
									if (path[j].x >= 0) {
										printf("<%d,%d>\n", path[j].x, path[j].y);
									}
							}
							return 0;
						}
						break;
					}
				}
			}
			round++;
		}
		
		if (round == 4) {
			//将当前坐标的搜索方向dir重置为0
			dir[k] = 0;
			path[k].x = 0;
			path[k].y = 0;
			//将当前坐标回退到上一步
			
			switch (dir[k-1]) {
			case 0:
				y++;
				break;
			case 1:
				x++;
				break;
			case 2:
				y--;
				break;
			case 3:
				x--;
				break;
			}
			if (k - 1 < 0) {
				printf("No solution!\n");
				break;
			}
			//令上一步的搜索方向加1(不然会重复上一次的方向)
			dir[k - 1]++;
			//回退到上一步,即让k减1
			k--;
		}

	}
	return 0;
}

运行截图

无解决方案
有解决方案

来源

华南理工大学广州学院 – 林煜东 linyd@gcu.edu.com