Arts打卡第8周
Algorithm。主要是为了编程训练和学习。 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。 进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。 关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell。
Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。 所以,需要你阅读并点评至少一篇英文技术文章, 我最喜欢去的地方是http://Medium.com(需要梯子) 以及各个公司的技术blog,如Netflix的。
Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。 学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
Share:主要是为了建立你的影响力,能够输出价值观。 分享一篇有观点和思考的技术文章。
Algorithm :有效数度:
参考博友的文章:原文链接:https://blog.csdn.net/weixin_38823568/article/details/81202020
class Solution {
public boolean isValidSudoku(char[][] board) { for (int i = 0; i < 9; i++){
HashSet<Character> row = new HashSet<>();
HashSet<Character> line = new HashSet<>();
HashSet<Character> cube = new HashSet<>();
for (int j = 0; j < 9; j++){
if ('.' != board[i][j] && !row.add(board[i][j])){
return false;
}
if ('.' != board[j][i] && !line.add(board[j][i])){
return false;
}
int m = i / 3 * 3 + j / 3;
int n = i % 3 * 3 + j % 3 ;
if ('.' != board[m][n] && !cube.add(board[m][n])){
return false;
}
} }
return true;
// 参考文章:https://blog.csdn.net/weixin_38823568/article/details/81202020
// https://blog.csdn.net/qq_38200548/article/details/80865681 }
Review:看了一点BigDecimal 的源码
divisor 除数 remainder 余数
BigDecimal在处理数的时候,新建了一个数字在填充每long上面的每一位
Tip : 在工作中发现,使用的是mybatis框架,手动写的sql用自定义的实体类接受。发现返回的实体类,不会走自定义类中的get方法。(因为我自己,自定义的类中的get方法做了非null判断,而sql 返回的实体类,不会走非null 判断。)
并且,sql返回的实体类,还能躲过 java代码中 equals(BigDecimal.Zero)的判断。
这个问题,还在进一,查询之中。希望,有经验的大神不吝赐教。
Share :王维纲老是关于计算机思维的文章:欢迎大家积极订阅万老师的专栏。得到内容很不错,欢迎订阅(不好意思水文了)
书名:《计算机思维》(Computational Thinking)
作者:两位计算机科学家——美国的彼得·丹宁(Peter J. Denning)和芬兰的马蒂·泰德(Matti Tedre)。
出版日期:2019年4月
一、理解算法
1.“算法(algorithm)”这个词,早在十七世纪就有了。把整个计算给流程化,变成标准操作,而且还得能让好几个计算师一起算,这就要求这个计算方法满足三个条件 ——
第一,计算过程必须被拆解成很多步骤,每一步干什么必须是简单而明确的。
第二,所有这些步骤要能拆分开来,分给几个计算师,各自负责其中的一部分。而这就有个交流问题,各个计算师算出来的东西得汇总在一起,形成一个最终的结果。
第三,纠错机制,让计算师们能觉察到自己哪里算错了。
按今天的概念,这其实就是“分布式并行计算”。这不但是计算机方法,而且还是超级计算机的方法。
2.所以我们可不是先有了计算机之后才有的计算机思维。人们早就有了计算机思维,只不过当时没有机器可用、只能用人。
3.能提出算法,和自己会算,完全是两码事。算法最大的好处就是它是机械化的操作。算法化就是标准化和流程化。这其实就是整个机械化大生产的秘密。
4.计算机思维的第一原则:把人的情感和主观判断排除在计算过程之外。
5.哲学家的思想总是领先于技术实现,而老百姓的思想则被技术所左右。每个时代的技术,都会主导这个时代的人的思维。老一辈的人爱说“压力很大”、“动力十足”、“把压力化为动力”,这其实是一种暗喻 —— 是把人给当成了蒸汽时代的机车。而今天的年轻人则善于用计算机做暗喻,会说……“我的大脑死机了”。
二、理解硬件
1.从提花织机的打孔卡提供了“严格的灵活性”,到巴贝奇的可编程通用计算机,到冯·诺依曼架构的CPU和内存,这是非常清晰的演变。现在我们看到了,图灵再厉害,“编程”这个思想不是他先提出的;冯·诺依曼再神,计算机系统不是他发明的。
2.为什么说信息行业是个创新行业呢?因为第一,这里面的想法太密集,有太多可以改进之处;第二,改进的方向相当明确。
3.从计算机思维的角度来说,核心教训是你必须考虑硬件。永远都别忘了计算机是个机器,而机器有数学算法之外的、自己的特点和脾气。
三、理解学科
计算机科学的发展可以分为三个方面 ——
1.初级,是怎么更好地实现自动化,主要解决应用问题;
汇编语言-高级汇编语言-账号管理-操作系统-系统思维-工程思维-网络思维-安全思维-编程思想-程序员思维-编程技能
2.中级,是研究“计算”这件事儿本身,上升到了类似于自然科学的层面;
计算机科学真正成熟的标志,是“计算机”这个东西,和“计算”这个行为本身,成了研究的对象。就好像动物学研究动物、植物学研究植物一样,计算机科学,研究计算机。计算机问题本质上是数学问题。现在有很多应用数学家就在专门研究这些问题。
3.高级,则是把计算思维用到其他科学领域中去,是带给人认知的升级。
人们突然意识到,“计算”是个非常基础的逻辑,到处都是计算。它还给我们提供了一个非常不一样的观察世界的眼光。
四、理解软件
1.软件工程,可以说是工程管理和综合治理手段的极限。它告诉我们如何治理最复杂的系统。
2.工程师思维和科学家思维至少有三个重大区别——
第一,科学家是寻找事物的规律,而工程师是去设计一个东西。科学家只要觉得这个规律有意思就可以发表,而工程师得负责任。
第二是对知识的态度。科学家面对知识,看懂了、能总结出规律就行。而工程师要把这个知识拿来用。
第三是对模型的使用。科学家喜欢简化的模型,能抓住实质就行。而工程师必须考虑所有的细节。
所以软件不但是个工程,而且比传统工程难得多。
3.软件工程项目的复杂性问题:
1个人干12个月的活,绝对不是12个人在1个月内能干完的。项目用的程序员越多,平均每个人出活的速度就越慢。所以你规划项目的时候不要算什么“人月”。
你这个团队做出来的软件的结构,往往和你这个团队的人员组织管理结构高度相似。所以软件工程不但要管项目,还要管人。
4.现代软件工程要求,软件产品必须达到下面这五个目标,称之为“DRUSS” ——
Dependable,可信赖,让顾客真能指望上你这个软件;
Reliable,得可靠,不能总出毛病;
Usable,软件是给人用的,得让人能够上手;
Safe,用的时候不能出安全事故;
Secure,它得不容易被黑客攻击才行。
5.软件工程的根本问题,是人的问题。主导软件开发的这个人,必须得能够理解高度复杂的东西才行。你得能驾驭复杂。
6.“好的判断来自经验,而经验来自坏的判断。”软件每天都在更新,但软件工程的背后,是一棵经年累月长出来的大树。
五、理解设计
1.发布,是尽最大努力,呈现一个最好的东西的行动。发布能刺激我们完善自我。
2.软件设计是一个激进的思维方式转换。以前的软件工程思维,是关注于功能和实现;现在的设计思维,则要求我们要考虑到用户和产品应用的环境。软件设计和一般产品的设计还不一样。一般产品让你感觉好用、好看比较容易,可能最多考虑一些人体工程学之类。而软件,跟用户是交互式的关系。用户会在软件中做出各种行为,软件是让用户活动的地方。
3.软件设计的目标,是创造一个虚拟世界。
4.软件设计,可以分为六个等级。
-1 级,是流氓软件。这种软件不但不安全而且很可能专门留了收集信息甚至攻击系统的后门,而且完成度很低,一堆bug。
0 级,是轻蔑的满意。基本上可以用,但是大家都知道其中有很多问题,也不怎么安全。
1 级,是软件能够满足基本的需求,比较可靠。
2 级,软件能跟环境和用户使用习惯达到了完美配合。你不需要学习它怎么用,凭直觉就可以直接使用。该有的功能它都有,而且非常可靠。
3 级,是软件能主动规避负面的结果。这就要求设计者不但要满足用户正常的需求,还得事先把各种怪异的用法、极端的情况都考虑到,确保软件在任何情况下都没有故障。
4 级,也就是最高级,是这个软件能给用户带来喜悦。这意味着软件超出了用户的预期,让人用上之后会迫不及待地想要把它推荐给别人。
5.软件设计是技术、数学、艺术、文化和哲学的融合创造。软件设计里面有“道”。
六、理解模拟
1.“理论”和“实验”,都是人的思想和真实世界之间互相印证。但是有了超级计算机之后,就出现了一个新的研究模式,也就是“计算”。是用计算机*模拟*一个系统的演化。
2.“计算思维”带给科学研究的认知升级:传统的因果、理论、学说,无法描述真正复杂的现象。计算不能让你得到什么一句话解释,但是计算能让你更接近真实情况。
Arts打卡第8周的更多相关文章
- Arts打卡第9周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- ARTS打卡第三周
Algorithm 题目描述 Given an array of integers, find if the array contains any duplicates. Your function ...
- ARTS打卡计划第二周-Share-使用java注解对方法计时
现在有这样一种常见,系统中有一个接口,该接口执行的方法忽快忽慢,因此你需要去统计改方法的执行时间.刚开始你的代码可能如下: long start = System.currentTimeMillis( ...
- ARTS打卡计划第二周-Tips-mysql-binlog-connector-java的使用
最近发现一个挺不错的框架mysql-binlog-connector-java,可以实时监控binlog的变化. 首先检查mysql的binlog是否开启,在开启的情况下: 引入依赖 <depe ...
- ARTS打卡计划第二周-Review
本周review的文章是:https://medium.com/@hakibenita/optimizing-django-admin-paginator-53c4eb6bfca3 改篇文章的题目是: ...
- ARTS打卡计划第二周-Algorithm
665. 非递减数列 https://leetcode-cn.com/problems/non-decreasing-array/ 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元 ...
- ARTS打卡计划第一周-Share-系统字典模块的设计
在软件开发的过程,经常有一些类型的字段信息:性别.学历.职级.车辆类别.公司类型.结算类型等.这些字段有2个特征:1是字段可选的类型是有限,2是字段可能会变化,我们把这种字段描述为字段字段. 本篇文 ...
- ARTS打卡计划第一周-Tips-ControllerAdvice的使用
通常在开发具体项目过程中我们可能会面临如下问题: 统一所有的json返回结果 统一处理所有controller中的异常,并且给不同异常不同的返回状态值 统一对返回的接口做数据校验或者加密,防止篡改 在 ...
- ARTS打卡计划第一周-Review
本周分享的文章来自于medium的 Testing Best Practices for Java + Spring Apps 这个文章主要讲的是java测试的一些最佳实践 1.避免函数返回void, ...
- ARTS打卡计划第一周-Algorithm
7. Reverse Integer import math class Solution: def reverse(self, x: int) -> int: ret = 0 if x > ...
随机推荐
- vue实现一个评论列表
<!DOCTYPE html> <html> <head> <title>简易评论列表</title> <meta charset=& ...
- nodejs之express的中间件
express中间件分成三种 内置中间件 static 自定义中间件 第三方中间件 (body-parser) (拦截器) 全局自定义中间件 在请求接口时 有几个接口都要验证传来的内容是否存在或者是否 ...
- 简单记录一次注入到shell
0x00 前言 帮朋友之前拿的一个站,有点久了没有完整截图,简单记录一下. 0x01 基础信息 操作系统:win 集成环境:phpstudy 端口开放:82,3306,3389 有phpmyadmin ...
- oracle的LAST_DAY()函数
转自:https://blog.csdn.net/u012581453/article/details/53727936 LAST_DAY LAST_DAY函数返回指定日期对应月份的最后一天. 获取当 ...
- Linux命令——su 、su -、sudo
前言 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户. 切换用户身份有两个命令 su [-] usernam ...
- diff算法实现
大致流程 var vnode = { tag: 'ul', attrs: { id: 'list' }, children: [{ tag: 'li', attrs: { className: 'it ...
- 关于this和$(this)
$(this)是jquery对象 指当前dom 例如 <div class='a'>4343</div> $('.a').on('click',function(){ $(th ...
- Promise原理实现
首先先看一下 promise 的调用方式: // 实例化 Promise: new MyPromise((resolve, reject) => { setTimeout(() => { ...
- 009_Source Insight 3.5安装及使用
链接:https://pan.baidu.com/s/1CBEhIhYtZZ6rUjq7yu4J2w提取码:qkv0 复制这段内容后打开百度网盘手机App,操作更方便哦 SourceInsight3. ...
- 16 | “order by”是怎么工作的?
在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求.还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名.年龄. ...