通过<现代程序设计>这门课,自己的确学到了好多东西.其实并不是说讲课有多棒,一是因为讲课的次数其实并不多,二是讲课的内容其实感觉并没有太大的提高,在课程快结束的时候,我现在还能够有记忆的知识性内容,也许只有C++11的一点点知识.但是之所以说通过这门课自己学到了好多,是因为这门课布置的作业和这门课一起上课的同学.
记得这门课刚开始的时候老师发了一张表统计大家目前的代码量...因为刚刚参加完暑期ACM集训....自己很嚣张的填了五万行...现在看来真的是Too Simple,Sometimes Naive....
对于不同的人来说,这些作业的意义可能不同,对于现在正渴望学习很多东西的我来说,这些作业让我掌握了许多.从最初的动态规划解决各种子数组问题,到一步步的制作UI做成类库实现单例模式做成一个简单的软件,从解决看起来不可能的word search到利用TCP完成服务器/客户端连接处理用户提交数据并实现动态展现黄金数,再到读懂千行程序完成注释并尝试添加新功能修改Bug,还有这次的利用网页脚本编程学习JavaScript,通过这大大小小十次作业,语言方面熟练了C#,学会了JavaScript,了解了C++11,方法方面熟悉了单元测试,单例模式,学习了C#和C++的网络通信内容
本次作业要求写成一个网页能够直接在网上显示,开始的时候我想用ASP.NET来实现,正好可以借此机会学习一下,在基本掌握了ASP.NET的初步实现方式之后,我开始纠结于如何在网上直接显示,很明显我需要申请域名放我的前端网页,然后再配我的后台进行用户输入处理(不知道是不是这个样子)....好麻烦..后来了解了一下JavaScript之后发现这个东西应该可以很轻松的解决我的这个需求,于是整个程序我最终采用JavaScript来实现,没有采用任何类似于JQuery的库,一是因为用原始的JS语言可以更好的了解其DOM模型,二是其实我当时不知道有JQuery这个库...
子标签,在用户输入数组之后利用正则文法进行输入正确性有效性检查,然后将输入内容导入计算数组中,最终在网页端显示初始状态
1.1. 用户也可以自行定义数组的大小,或者要求随机生成一个数字矩阵。
这里当用户单击"生成随机数组"这个Button之后,会按照用户输入的行列要求产生随机数组
主要实现方式是根据用户输入产生相应表格之后,利用随机数产生相应数字,例如我要产生-1000~1000之间的整数,那么就可以利用下面的一行代码来实现
1 Math.floor(Math.random() * (2000) - 1000)
2. 用户这时候有两个选择
2.1 按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。 最好用不同的颜色标识不同的状态。
这里当用户选择"单步执行"这个RadioButton之后,用户可以按">>"键一步一步看到演示,当前计算到的临时子数组会以紫色区域显示,当前的最大子数组会以白边区域显示
主要实现方式是事先计算好整个动态规划过程中的每个状态.例如我可以用一个二维数组来记录,第一维表示当前的状态序号,第二维利用当前整个数组的01组合来表示.关于01组合表示,我想到了两个方法,第一个是第二维大小等于row*col,这样每一个(i,j)坐标都可以根据公式i*col+j表示成一个下标,然后用01来表示;第二个是可以利用位运算实现状态压缩,将每个(i,j)利用位运算压缩成一个长度为row*col字符串.相比较而言,位运算效率更高.
单步执行过程中,每次展示当前的状态序号表示的状态,其中为了避免颜色冲突的问题,我用紫色来表示当前正在计算的子数组,白边区域表示目前位置已经算出的最大子数组.整个界面的配色方案采用win8的Metro配色风格.
2.2 按 自动运行 键, 在 GUI 看到程序自动运行,并自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间)
这里当用户选择"自动运行"这个RadioButton并设置好Interval之后,程序会按照用户自定义的Interval一步一步执行,在每次改变状态的时候会停留相应间隔
不得不说JavaScript对于计时器的支持其实很有限,SetTimeout()和SetInterval()两种方法.我才用SetInterval(),第一个参数传递我改变状态的这个函数AutoRunning(),并在当前状态序号超过状态总数的时候clearInterval()停止我的当前计时器,第二个参数传递用户自定义的Interval属性.
3. 咳,我没看清楚! 这时最好有一个 倒带 / 回滚 的键, 让用户可以看清楚关键的几步。
这里用户可以随时按"Pause"按钮暂停自动运行,并可以随时切换自动/手动模式,前进或者后退
这个实现起来也很简单,倒带/回滚就是返回上一个状态
(当然,用户可以选择是普通模式还是扩展定义的连通模式)
下面的逻辑选项分别有一维/二维/水平相连/垂直相连/水平垂直都相连/联通块/水平垂直相连联通块等模式,用户可以自由选择
对于一维和二维普通模式我采用了普适的动态规划算法,对于水平相连的情况我是采用我在第二次作业中提到的方法:
对于一维左右联通情况,我们可以知道它的最大和要么是没有跨过了a[n]和a[1],要么是没有跨过;如果没有跨过,那么就是简单的一维普通情况,记最大值为ans1;如果跨过了,那么不妨设此时的最大子数组为a[j],a[j+1],....a[n],a[1],a[2],...a[i],i
而与二维垂直相连情况,其实和二维普通情况是一样的,只不过循环的时候枚举纵向开始和结束的时候不需要保证结束点>开始点就好,同时要根据不同的开始/结束关系指定不同的染色方案
对于联通块的几种情况,我还是用了状压dp的朴素解决方法,展示起来类似于枚举,所以可以处理的状态数有限,我在程序中也做了限制,用户输入的row*col的值不能超过16,这样对于O(m*n*2^mn)的复杂度来说,已经算是可以勉强接受了.
要求: 这个要求的各个方面我们都已经单独写代码试验过了,把它们合起来也不是太难。
写JavaScript还是遇到了一些问题,JS是一门弱类型的语言,所以在进行运算的时候稍不注意就会发生字符串连接的情况,这在前期导致我debug了好久.另外对于这样一门脚本语言,直接在网页端debug貌似不是那么方便...
最终我的页面用Index.html来显示
Declaration.js用来定义一些基本的全局变量(全局变量这种东西虽然很危险,但对于这样一个小型的项目来说的确很方便)
BaseFunction.js用来处理用户输入,得到数组与行列等基本参数
Check.js用来检验用户各种输入有效性,采用正则文法来验证
MaxSum.js用来处理程序逻辑,处理求最大子数组的过程
State.js用来改变展示状态
ButtonEvent.js用来处理各种控件响应事件
要求还那样: 写程序和单元测试,签入GitHub,写博客描述,总结所花费的时间和估计。
程序已经导入GitHub.https://github.com/oldoldb/homework-10
每次的总结所花费的时间和估计都是特别水的事情,因为一开始对于所要学习的知识和作业没有很好地了解,无法准确估计时间,而真正开始编码的时候又会太过投入忘记记录花费时间..
所以以下又是复制粘贴以前的....
Personal Software Process Stages
时间百分比(%)
实际花费的时间 (分钟)
原来估计的时间 (分钟)
Planning
计划
2.0
45
60
· Estimate
· 估计这个任务需要多少时间,把工作细化并大致排序
2.0
45
60
Development
开发
88.7
2000
1500
· Analysis
· 需求分析 (包括学习新技术)
2.7
60
60
· Design Spec
· 生成设计文档
0
0
0
· Design Review
· 设计复审 (和同事审核设计文档)
0
0
0
· Coding Standard
· 代码规范 (制定合适的规范)
5.3
120
60
· Design
· 具体设计
5.3
120
60
· Coding
· 具体编码
62.1
1400
1200
· Code Review
· 代码复审
10.6
240
60
· Test
· 测试(自我们测试,修改代码,提交修改)
2.7
60
60
Reporting
总结报告
9.3
210
60
· Test Report
· 测试报告
5.3
120
0
· Size Measurement
· 计算工作量
1.3
30
0
· Postmortem & Improvement Plan
· 事后总结, 并提出改进
2.7
60
60
Total
总计
100%
总用时
总估计的用时
2255
1260
评分:
功能 (分数范围 –30 到 30分): 在PC 桌面上运行 (满分 20 分); 如果能在程序能直接在网上显示 (例如使用 Javascript 在网页上让用户直接看到过程),则满分是 30 分。
我采用的是Html+CSS+JavaScript,程序可以直接在网上显示,满分30分.
代码质量 (分数范围: -30 分到 30 分): 同学们在课程中已经看了很多书,实践了不少原理,也看过烂的代码 (很多同学还大义凛然地鄙视过烂代码),并且纷纷表示要写高效/好懂/可扩展的算法。现在就来试试看,请写博客,截图,画图描述:
首先我没有看很多编码规范方面的书,这学期为了这门课学习的书有<编程之美>,<数学之美>,,,WPF方面的书>,,,,,代码大全这本书老师虽然推荐但是其实并没有读...也许这就是短视吧...毕竟就这门课目前来说可能追求的短平快..
注释,命名: 有一致规范的规范,合适的注释
我的代码的命名和注释一向都比较完成和规范,命名规范已经逐渐过渡到帕斯卡命名法,注释也会随手写好
命名方面我比较倾向于用有意义的完整单词来表示函数/变量的意义,例如CreateTable,InitSum等等,不太支持用简写来代表整个单词,因为这样经常会出现简写含义不清楚,而且不
同的人对于同一个单词的简写方法理解不同,而用完整单词不会出现这个问题.对于Button事件我都同一用ButtonName+Clicked来表示等等
结构: 结构清晰,各种类/结构的定义 正确地反映了现实世界实体,以及实体之间的关系.
可能是对于JS的编码经验不够,JavaScript定义成类个人感觉完全没有必要,我定义许多function需要的时候就用就好..
程序结构如下:
这次用的纯JavaScript实现,没有使用JQuery库,对自己也是一个锻炼,逻辑放在.js里实现,.css实现样式表,.html用于基本构建页面.
单元测试: 有单元测试保证 非UI 模块的正确性 (UI 模块不要求单元测试自动覆盖),有代码覆盖率。
我们的授课老师邹老师不愧是单元测试之王,C++/C#我们要做单元测试,这次的脚本也要做单元测试.
JavaScript的单元测试我采用QUnit,这个单元测试框架主页在这里:http://qunitjs.com/
由于很多地方不方便做单元测试,对于非UI模块,我挑选了MaxSum(b,n),MinSum(),CheckMargin(x,y)三个典型的函数就行单元测试,测试如下:
1 test("Test for MaxSum(b,n)",function ()
2 {
3 var testArray = new Array(10, -1, -10, 10, 2);
4 var ActualResult=MaxSum(testArray,5);
5 equal(ActualResult, 12, "MaxSum(testArray,5) is 12");
6 testArray = new Array(-10, -10, -10, -10, -100);
7 ActualResult = MaxSum(testArray, 5);
8 equal(ActualResult, -10, "MaxSum(testArray,5) is -10");
9 })
10 test("Test for MinSum(b,n)",function ()
11 {
12 var testArray = new Array(10, -1, -10, 10, 2);
13 var ActualResult=MinSum(testArray,5);
14 equal(ActualResult, -11, "MinSum(testArray,5) is -11");
15 testArray = new Array(-10, -10, -10, -10, -100);
16 ActualResult = MinSum(testArray, 5);
17 equal(ActualResult, -140, "MinSum(testArray,5) is -140");
18 })
19 test("Test for CheckMargin(x,y)",function ()
20 {
21 var row=10;
22 var col=5;
23 var ActualResult=CheckMargin(10,5);
24 equal(ActualResult, false , "CheckMargin(10,5) is false");
25 ActualResult = CheckMargin(-1, -1);
26 equal(ActualResult, false , "CheckMargin(-1,-1) is true");
27 })
1 DOCTYPE html >
2
3 < html lang ="en" xmlns ="http://www.w3.org/1999/xhtml" >
4 < head >
5 < meta charset ="utf-8" />
6 < title > title >
7 < script type ="text/javascript" src ="QUnit.js" > script >
8 < script type ="text/javascript" src ="homework-10.js" > script >
9 < script type ="text/javascript" src ="test.js" > script >
10 < link href ="QUnit.css" rel ="stylesheet" type ="text/css" />
11 head >
12 < body >
13 < h1 id ="qunit-header" > QUnit Test Suiteh1 >
14 < h2 id ="qunit-banner" > h2 >
15 < div id ="qunit-testrunner-toolbar" > div >
16 < h2 id ="qunit-userAgent" > h2 >
17 < ol id ="qunit-tests" > ol >
18 < div id ="qunit-fixture" > test markupdiv >
19 body >
20 html >
我们可以看到有一个点没有过,当我输入的数组为为(-10,-10,-10,-10,-100)时,我期望得到的子数组最大和为-10,但结果确实测试不正确,但实际运行的结果:
所以我觉得可能是一些全局变量单元测试不能很好地照顾到,导致出现了这一问题...
关于代码覆盖率,JS的代码覆盖率检查我在网上搜到使用ScriptCover来实现,但是这东西貌似down不下来?而且对于单元测试这种东西我的意见一向是这种东西是对于大型项目封装的很彻底才能发挥它的作用,而对于一些小型项目来说,无谓的刷代码覆盖率是没有多少实际意义的...
(注: 以上的各个部分,达不到基本要求的,倒扣分,扣到 –30 分为止。 抄袭按学校规定处理)
我不会达不到基本要求嗒
附加题: 你已经做了这么多,不妨再进一步: 如果博客中描述了动态规划的原理,并通过录制屏幕 的方式让一般的读者 (例如,正在学习算法的大学生)能通过你的动态程序理解动态规划的算法,以及这个算法的扩展,那么可以得到附加分 10 分。你可以宣传你的博客,让大家都来学习。
"你已经做了这么多,不妨再进一步".......
动态规划,维基百科上的原理解释是这样的
就我的理解来说,动态规划主要有两点:
1.最优子结构
2.重叠子问题
最优子结构保证了我们可以利用动态规划来解决问题,而重叠子问题保证了我们可以得到比朴素方法复杂度更低的算法.
我在暑假的时候较为系统的学习过算法,当时影响我比较深的两篇博客推荐在这里:
第一个是July大神的博客,他的博客不用多说已经被很多人拜读过了:http://blog.csdn.net/v_july_v/article/details/6110269
第二个是liufeng_king的博客,他的博客基本上系统的阐述了大二下学期算法课本的内容:http://blog.csdn.net/liufeng_king/article/details/8490770
关于动态规划的知识点研究方法相信可以在以上两篇博客中找到答案.
在这里我们利用最大子数组问题探讨一下动态规划算法
题目描述:输入一个整型数组,数组元素有正有负,数组中连续的一个或多个整数组成一个子数组,求所有子数组的和的最大值.
样例:例如输入的数组为-10,-1,1,2,-10,那么最大的子数组和为1+2=3
动态规划解法:
记原数组为a[i],sum[j]=max{a[i]+a[i+1]+...+a[j]},0<=i<=j,且0
那么我们很容易知道,当sum[j-1]>0时,sum[j]=sum[j-1]+a[j],(因为a[j]加上一个正数总会大于自身的),否则sum[j]=a[j],(因为a[j]加上一个负数肯定比自身小) 注意我们的sum[j]的含义,它代表j以前的最大子数组和.
那么我们可以得到动态规划方程为
sum[j]=max(sum[j-1]+a[j],a[j]),0<=j
已知遍历一遍数组,同时维护一个最大ans,即可得到答案.复杂度为O(n)
当我们将数组扩展到二维,只需在进行动态规划之前,先将数组纵向压缩为一维就好,关于扩展的算法可以参见我以前的作业:http://www.cnblogs.com/oldoldb/p/3331975.html
至于联通块问题,目前我的解决方式还是停留在暴力状压DP的解决层面上...
下面根据我们的演示程序演示一下最大子数组的求解方法:
我们先随机生成一个一维数组,ans初始化为-Number.MAX_VALUE
此时扫描第0个元素,当前计算子数组为a[0]=-789,暂定最大和=sum[0]=a[0]=-789,ans=max(ans,sum[0])=ans=sum[0]=-789
扫描第1个元素,当前计算子数组为a[1]=523,sum[1-1]=sum[0]=-789<0,所以暂定子数组=sum[1]=a[1]=523,ans=max(ans,sum[1])=523
扫描第2个元素,当前计算子数组为a[2]=-779,由于sum[1]=523>0,所以sum[2]=sum[1]+a[2]=-256,ans=max(ans,sum[2])=523
a[3]=788,sum[2]<0,sum[3]=a[3]=788,ans=max(ans,sum[3])=788
依次类推
扫描最后一个元素,我们得到最大子数组和(白边区域)ans=2443.
这个演示程序是不是很方便~!如果有任何地方不清楚可以随时后退~
以上示例生成的GIF演示如下
感觉最后一次作业做的比较完美了.
现代程序设计是一门很好的课,
这个学期有编译/数据库/软工这三门亲手写项目的课,而且工程量都不小,
但是我还是认为现代程序设计带给我的收获更大
那么,
现代程序设计,
再见!
转载于:https://www.cnblogs.com/oldoldb/p/3459097.html
你可能感兴趣的:(现代程序设计 homework-10)
2020-04-12每天三百字之连接与替代
冷眼看潮
不知道是不是好为人师,有时候还真想和别人分享一下我对某些现象的看法或者解释。人类社会不断发展进步的过程,就是不断连接与替代的过程。人类发现了火并应用火以后,告别了茹毛饮血的野兽般的原始生活(火烧、烹饪替代了生食)人类用石器代替了完全手工,工具的使用使人类进步一大步。类似这样的替代还有很多,随着科技的发展,有更多的原始的事物被替代,代之以更高效、更先进的技术。在近现代,汽车替代了马车,高速公路和铁路
使用Faiss进行高效相似度搜索
llzwxh888
faiss python
在现代AI应用中,快速和高效的相似度搜索是至关重要的。Faiss(FacebookAISimilaritySearch)是一个专门用于快速相似度搜索和聚类的库,特别适用于高维向量。本文将介绍如何使用Faiss来进行相似度搜索,并结合Python代码演示其基本用法。什么是Faiss?Faiss是一个由FacebookAIResearch团队开发的开源库,主要用于高维向量的相似性搜索和聚类。Faiss
利用Requests Toolkit轻松完成HTTP请求
nseejrukjhad
http 网络协议 网络 python
RequestsToolkit的力量:轻松构建HTTP请求Agent在现代软件开发中,API请求是与外部服务交互的核心。RequestsToolkit提供了一种便捷的方式,帮助开发者构建自动化的HTTP请求Agent。本文旨在详细介绍RequestsToolkit的设置、使用和潜在挑战。引言RequestsToolkit是一个强大的工具包,可用于构建执行HTTP请求的智能代理。这对于想要自动化与外
【勾心原创】《去年夏天》
不勾心的豆角
(原创作者:不勾心的豆角)本期【勾心原创】,继续本人不勾心的豆角的现代诗创作之旅。《去年夏天》原创作者:不勾心的豆角那里芳草茵茵绿柳成行澄净蓝天下屋顶们相亲相爱闪着橙色紫色的馨香溪流温柔偎依着村庄牛儿羊儿信步徜徉还有成群的白鸽在尖顶的教堂盘旋歌唱孩子们是自由的蒲公英奔跑在希望的田野上任由天真的笑声肆无忌惮烂漫这人间天堂夜幕小心翼翼呵护着甜美的梦乡只剩尽职的晚风陪伴顽皮的星子们游荡快告诉我心爱的姑娘
ES聚合分析原理与代码实例讲解
光剑书架上的书
大厂Offer收割机 面试题 简历 程序员读书 硅基计算 碳基计算 认知计算 生物计算 深度学习 神经网络 大数据 AIGC AGI LLM Java Python 架构设计 Agent 程序员实现财富自由
ES聚合分析原理与代码实例讲解1.背景介绍1.1问题的由来在大规模数据分析场景中,特别是在使用Elasticsearch(ES)进行数据存储和检索时,聚合分析成为了一个至关重要的功能。聚合分析允许用户对数据集进行细分和分组,以便深入探索数据的结构和模式。这在诸如实时监控、日志分析、业务洞察等领域具有广泛的应用。1.2研究现状目前,ES聚合分析已经成为现代大数据平台的核心组件之一。它支持多种类型的聚
python多线程程序设计 之一
IT_Beijing_BIT
# Python 程序设计语言 python
python多线程程序设计之一全局解释器锁线程APIsthreading.active_count()threading.current_thread()threading.excepthook(args,/)threading.get_native_id()threading.main_thread()threading.stack_size([size])线程对象成员函数构造器start/ru
现代汉语粗糙版 文学史与经典
学习搬运工
第十六章文学史与经典文学史的兴起在西方,虽然从亚里士多德开始,在人类的著述中已经可以找到文学史概念与写作方式的萌芽,但是,人们一般认为17世纪后期到18世纪是现代文学史写作真正开始的时期。长达百年波及整个欧洲的“古今之争”孕育出文学研究的历史意识,现代意义上的文学史观念在这场影响深远的论争中初见端倪。从18世纪晚期到19世纪初,由于席勒、弗·施莱格尔和赫尔德等人的介入,文学史研究逐渐变得复杂和成熟
Python 课程10-单元测试
可愛小吉
Python教學 python 单元测试 开发语言 TDD unittest
前言在现代软件开发中,单元测试已成为一种必不可少的实践。通过测试,我们可以确保每个功能模块在开发和修改过程中按预期工作,从而减少软件缺陷,提高代码质量。而测试驱动开发(TDD)则进一步将测试作为开发的核心部分,先编写测试,再编写代码,以测试为指导开发出更稳定、更可靠的代码。Python提供了强大的unittest模块,它是Python标准库的一部分,专门用于编写和执行单元测试。与其他测试框架相比,
AI大模型的架构演进与最新发展
季风泯灭的季节
AI大模型应用技术二 人工智能 架构
随着深度学习的发展,AI大模型(LargeLanguageModels,LLMs)在自然语言处理、计算机视觉等领域取得了革命性的进展。本文将详细探讨AI大模型的架构演进,包括从Transformer的提出到GPT、BERT、T5等模型的历史演变,并探讨这些模型的技术细节及其在现代人工智能中的核心作用。一、基础模型介绍:Transformer的核心原理Transformer架构的背景在Transfo
线上到线下:相亲交友系统如何打造全方位恋爱体验
h17711347205
人工智能 大数据
在数字化时代,相亲交友系统正逐渐成为单身人士寻找伴侣的重要渠道。我们的目标是打造一个全方位的恋爱体验,将线上的便捷性与线下的真实互动相结合,为用户提供一个无缝衔接的交友平台。以下是如何从运营角度出发,实现这一目标的详细策略。线上到线下:相亲交友系统如何打造全方位恋爱体验在快节奏的现代社会,相亲交友系统为单身人士提供了一个便捷的相识途径17711347205。然而,真正的恋爱体验往往需要线下的真实互
Android实现监听事件的方法
Amy木婉清
1.通过内部类实现2.通过匿名内部类实现3.通过事件源所在类实现4.通过外部类实现5.布局文件中onclick属性(针对点击事件)1.通过内部类实现代码:privateButtonmBtnEvent;//oncreate中mBtnEvent.setOnClickListener(newOnClick());//内部类实现监听classOnClickimplementsView.OnClickLis
广东麻将开发
红匣子实力推荐
在中国,麻将作为一种深受人们喜爱的传统娱乐活动,已经有着数百年的历史。随着互联网和移动设备的普及,麻将游戏也从实体桌面转移到了数字平台,其中广东麻将因其独特的地方特色和玩法而备受青睐。本文将介绍广东麻将的开发过程,包括其设计理念、技术实现以及用户体验优化等方面。一、设计理念:广东麻将开发的核心理念是保留传统麻将的精髓,同时融入现代科技元素,使游戏既具有亲切感又不失趣味性。开发者通常会深入研究广东地
生成式地图制图
Bwywb_3
深度学习 机器学习 深度学习 生成对抗网络
生成式地图制图(GenerativeCartography)是一种利用生成式算法和人工智能技术自动创建地图的技术。它结合了传统的地理信息系统(GIS)技术与现代生成模型(如深度学习、GANs等),能够根据输入的数据自动生成符合需求的地图。这种方法在城市规划、虚拟环境设计、游戏开发等多个领域具有应用前景。主要特点:自动化生成:通过算法和模型,系统能够根据输入的地理或空间数据自动生成地图,而无需人工逐
C语言---程序设计练习题目及学习方法1
Wanyu677
C语言 c语言 学习方法 算法
学习方法要多练习在这些题目中的代码和题目自己动手去敲练习也是在熟悉语法,写代码第一步就是熟悉语法练习是在锻炼编程思维,把实际问题转换为代码的能力学会画图画图去理解内存,理解指针这些比较难懂的知识画图可以更好的理清思路辅助理解,强化理解学会调试借助调试,更好的理解代码和感知代码找出代码中的bug和程序逻辑(1)自增自减运算符inta=5,b,c,i=10;b=a++;c=++b;printf("a=
【大模型应用开发 动手做AI Agent】第一轮行动:工具执行搜索
AI大模型应用之禅
计算科学 神经计算 深度学习 神经网络 大数据 人工智能 大型语言模型 AI AGI LLM Java Python 架构设计 Agent RPA
【大模型应用开发动手做AIAgent】第一轮行动:工具执行搜索作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来随着人工智能技术的飞速发展,大模型应用开发已经成为当下热门的研究方向。AIAgent作为人工智能领域的一个重要分支,旨在模拟人类智能行为,实现智能决策和自主行动。在AIAgent的构建过程中,工具执行搜索是至关重要
python中文版下载官网-Python下载 v3.8.3 官方中文版
weixin_37988176
Python中文版是一款非常专业的通用型计算机程序设计语言安装包,Python具有比其他语言更有特色语法结构,而且在设计上坚持了清晰划一的风格,使得它成为一门易读、易维护并且被大量用户所欢迎的、用途广泛的语言,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python中文版软件介绍Python中文版是一门跨平台的脚本语言,Python规定了一个Python语法规则,实
python中文版软件下载-Python中文版
编程大乐趣
python中文版是一种面向对象的解释型计算机程序设计语言。python中文版官网面向对象编程,拥有高效的高级数据结构和简单而有效的方法,其优雅的语法、动态类型、以及天然的解释能力,让它成为理想的语言。软件功能强大,简单易学,可以帮助用户快速编写代码,而且代码运行速度非常快,几乎可以支持所有的操作系统,实用性真的超高的。python中文版软件介绍:python中文版的解释器及其扩展标准库的源码和编
全视通智慧病房系统旧病房改造方案
2301_78035670
解决方案 人工智能 大数据
一、背景介绍在当今医疗技术日新月异的时代,智慧病房作为医院现代化建设的重要一环,正逐步从概念走向现实,深刻改变着患者的就医体验与医护人员的工作模式。智慧病房的改造背景,根植于医疗需求的日益增长、技术创新的不断推动以及对医疗质量与效率的不懈追求之中。二、医疗需求的深刻变革随着人口老龄化的加剧和慢性病患者数量的激增,医疗资源分配不均、医患沟通不畅、患者照护效率低下等问题日益凸显。传统的病房管理模式已难
2022-08-15
梁亦冕
当好“答卷人”,考出“好成绩”近日,习近平总书记在省部级主要领导干部“学习习近平总书记重要讲话精神,迎接党的二十大”专题研讨班上发表重要讲话时强调,高举中国特色社会主义伟大旗帜,奋力谱写全面建设社会主义现代化国家崭新篇章。此次重要讲话明确宣示党在新征程上举什么旗、走什么路、以什么样的精神状态、朝着什么样的目标继续前进,对团结和激励全国各族人民为夺取中国特色社会主义新胜利而奋斗具有十分重大的意义。广
感谢“封建迷信”救了中国
讲健康的小鱼儿
首先,我们必须明白什么是封建迷信?封,最早考证可见甲骨文,是培树以划封疆界之意,后又引申为国,因此“封建”之意不言而喻,用现代话讲就是国内的自我建设、发展、改革和完善,封建者,国之内务也。至于迷信,主要指在精神层面后代对祖先的不疑、至信。中国有句老话叫富不过三代,为什么?就是因为后人丢弃了祖先的初衷和根本。时空转换,但一切皆在道中,不能离道,后代可以改革、完善和发展,但根和本不能丢。故《大学》曰:
演说:孩子嘴巴笨不会说话,如何提升自己的口才?#吴守立冬令营
吴守立国学智慧
关键词:少年领袖演说班国学吴守立国学天第书院论语吴守立在现代社会,口才已是一个人综合素质和综合能力的具体体现,二十一世纪是“表达世纪”,要想在这个“表达世纪”里成人成才,“会说”“会写”必不可少,随着新课改、升学对孩子表达能力提出更高的要求,口才将是我们每个人必修课和基本功。然而,孩子嘴巴笨不会说话,如何提升自己的口才?天第书院为大家介绍以下几种方法。1、父母做孩子最佳的倾听者和沟通者在孩子天性中
早晨新作现代诗两首:《记忆中背着竹筐送来礼物的外婆》《暗黑童话》!
千岛油菜子
图片发自App《记忆中背着竹筐送来礼物的外婆》小心翼翼的路途宛如山间的流水质朴无华而又华丽可爱的在岸边生长出彩色风车旋转着我的小时候而我在您的竹筐里我是一只睡着的记忆百年后却依旧满怀回忆——千岛油菜子写于2019.4.29早晨六点半多一点《暗黑童话》早晨的那只小鸟死了它说它去过远方也去过深海它还说当深海的海星和远方的星空重叠在一起的时候它将再次出生——千岛油菜子写于2019.4.29早晨六点半多
2020-03-24
艺鹰空间设计
从欧美的复古奢华,到现代极简的北欧风,一个太沉闷,一个略单调,设计师梁博,在自己的作品中融入一点点的复古元素,即能保留现代风格的清爽和功能上的便利,又可以收获复古的奢华和优雅,简直是太完美的搭配!古典风格住宅,设计师重新设计,厨房和起居室结合在一起,走廊和厨房起居室之间的墙从地板到天花板变成了一个透明隔断,给空间带来了更多的空气和光线。主卧室的设计颇有高级酒店的味道,左侧设置了休闲椅,右侧则有办公
变频器:原理、应用及其在现代工业与生活中的节能与智能控制作用
智能科技前沿
人工智能 科技 生活 单片机 嵌入式硬件
创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力!1.变频器的原理变频器(Inverter),是一种将固定频率的交流电(通常是50Hz或60Hz)转换为可变频率和电压的交流电的电气设备。其工作原理是基于电力电子技术和控制理论的应用,能够通过改变供给电机的电源频率来控制电动机的速度和扭矩。变频器的基本工作原理可以分为以下几个阶段:整流:首先,将输入的交流电(AC)通过整流器(通常是二极管
如何重启Linux服务器?
老男孩IT教育
git linux 运维
在Linux操作系统中,提供了多种方法用于重启服务器,那么Linux服务器如何重启?以下列举了常用的几种方法,希望对大家有所帮助,快来看看吧。重启Linux服务器有以下几种方法:1、使用命令行使用reboot命令reboot使用shutdown命令shutdown-rnow2、使用systemctl使用以下命令:systemctlreboot3、使用web界面大多数现代Linux发行版本都提供一个
从单体到微服务:FastAPI ‘挂载’子应用程序的转变
黑金IT
fastapi 微服务 fastapi 架构
在现代Web应用开发中,模块化架构是一种常见的设计模式,它有助于将大型应用程序分解为更小、更易于管理的部分。FastAPI,作为一个高性能的PythonWeb框架,提供了强大的支持来实现这种模块化设计。通过“挂载”子应用程序,我们可以为不同的功能区域(如前端接口、管理员接口和用户中心)创建独立的应用程序,并将它们整合到一个主应用程序中。本文将详细介绍如何在FastAPI中使用“挂载”子应用程序的方
了解 UNPKG:前端开发者的包管理利器
小于负无穷
前端 javascript typescript css html5 node.js
在现代前端开发中,JavaScript包管理和模块化是至关重要的,而npm则是最流行的JavaScript包管理器之一。不过,随着前端项目复杂性的增加,有时候我们希望快速引入外部依赖,而无需本地安装和构建。此时,CDN(内容分发网络)成为了一种方便快捷的解决方案,而UNPKG就是这种方式中的佼佼者。什么是UNPKG?UNPKG是一个基于npm的内容分发网络(CDN),它允许开发者直接通过URL从n
Python编写简单登录系统的完整指南
qq_35430208
python python 开发语言 Python编写简单登录系统 登录系统
在现代应用中,用户认证和登录系统是一个非常重要的功能。通过登录系统,应用能够识别用户的身份,并为其提供相应的权限和服务。本文将介绍如何使用Python编写一个简单的登录系统,包括用户注册、登录验证、密码加密等功能。通过这一教程,将学习如何构建一个基本的用户登录系统,并理解其中的关键技术。系统需求分析一个基本的登录系统应该具备以下功能:用户注册:新用户可以创建账号,系统会将用户名和密码存储起来。登录
[面试高频问题]关于多线程的单例模式
朱玥玥要每天学习
java 单例模式 开发语言
单例模式什么是设计模式?设计模式可以看做为框架或者是围棋中的”棋谱”,红方当头炮,黑方马来跳.根据一些固定的套路下,能保证局势不会吃亏.在日常的程序设计中,往往有许多业务场景,根据这些场景,大佬们总结出了一些固定的套路.按照这个套路来实现代码,也不会吃亏.什么是单例模式,保证某类在程序中只有一个实例,而不会创建多份实例.单例模式具体的实现方式:可分为”懒汉模式”,”饿汉模式”.饿汉模式类加载的同时
自我教育
自我的救赎
教育一词最早见于《孟子.尽心上》。“得天下英才而教育之,三乐也。”《现代汉语词典》里说:教育作为名词指按一定要求培养人的工作。作为动词指按一定要求培养或用道理说服人使照着做。单从词典上的解释,我们很难实施好教育,在工作中,我们说了无穷的道理也很难说服人使之照着做。我们只能在如何说道理,如何说服人方面下功夫。真正的教育是自我教育。是指让受教育者自己教育自己,自己管理自己,这是教育的最高点。我们教育者
PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
java UI linux PHP android
╔-----------------------------------╗┆
zookeeper admin 笔记
braveCS
zookeeper
Required Software
1) JDK>=1.6
2)推荐使用ensemble的ZooKeeper(至少3台),并run on separate machines
3)在Yahoo!,zk配置在特定的RHEL boxes里,2个cpu,2G内存,80G硬盘
数据和日志目录
1)数据目录里的文件是zk节点的持久化备份,包括快照和事务日
Spring配置多个连接池
easterfly
spring
项目中需要同时连接多个数据库的时候,如何才能在需要用到哪个数据库就连接哪个数据库呢?
Spring中有关于dataSource的配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
&nb
Mysql
171815164
mysql
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作
CommonDAO(公共/基础DAO)
g21121
DAO
好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。
DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业
直言有讳
永夜-极光
感悟 随笔
1.转载地址:http://blog.csdn.net/jasonblog/article/details/10813313
精华:
“直言有讳”是阿里巴巴提倡的一种观念,而我在此之前并没有很深刻的认识。为什么呢?就好比是读书时候做阅读理解,我喜欢我自己的解读,并不喜欢老师给的意思。在这里也是。我自己坚持的原则是互相尊重,我觉得阿里巴巴很多价值观其实是基本的做人
安装CentOS 7 和Win 7后,Win7 引导丢失
随便小屋
centos
一般安装双系统的顺序是先装Win7,然后在安装CentOS,这样CentOS可以引导WIN 7启动。但安装CentOS7后,却找不到Win7 的引导,稍微修改一点东西即可。
一、首先具有root 的权限。
即进入Terminal后输入命令su,然后输入密码即可
二、利用vim编辑器打开/boot/grub2/grub.cfg文件进行修改
v
Oracle备份与恢复案例
aijuans
oracle
Oracle备份与恢复案例
一. 理解什么是数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与
JavaEE开源快速开发平台G4Studio v5.0发布
無為子
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V5.0版本已经正式发布。
访问G4Studio网站
http://www.g4it.org
2013-04-06 发布G4Studio_V5.0版本
功能新增
(1). 新增了调用Oracle存储过程返回游标,并将游标映射为Java List集合对象的标
Oracle显示根据高考分数模拟录取
百合不是茶
PL/SQL编程 oracle例子 模拟高考录取 学习交流
题目要求:
1,创建student表和result表
2,pl/sql对学生的成绩数据进行处理
3,处理的逻辑是根据每门专业课的最低分线和总分的最低分数线自动的将录取和落选
1,创建student表,和result表
学生信息表;
create table student(
student_id number primary key,--学生id
优秀的领导与差劲的领导
bijian1013
领导 管理 团队
责任
优秀的领导:优秀的领导总是对他所负责的项目担负起责任。如果项目不幸失败了,那么他知道该受责备的人是他自己,并且敢于承认错误。
差劲的领导:差劲的领导觉得这不是他的问题,因此他会想方设法证明是他的团队不行,或是将责任归咎于团队中他不喜欢的那几个成员身上。
努力工作
优秀的领导:团队领导应该是团队成员的榜样。至少,他应该与团队中的其他成员一样努力工作。这仅仅因为他
js函数在浏览器下的兼容
Bill_chen
jquery 浏览器 IE DWR ext
做前端开发的工程师,少不了要用FF进行测试,纯js函数在不同浏览器下,名称也可能不同。对于IE6和FF,取得下一结点的函数就不尽相同:
IE6:node.nextSibling,对于FF是不能识别的;
FF:node.nextElementSibling,对于IE是不能识别的;
兼容解决方式:var Div = node.nextSibl
【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)
bit1129
垃圾回收
吞吐量与用户线程暂停时间
衡量垃圾回收算法优劣的指标有两个:
吞吐量越高,则算法越好
暂停时间越短,则算法越好
首先说明吞吐量和暂停时间的含义。
垃圾回收时,JVM会启动几个特定的GC线程来完成垃圾回收的任务,这些GC线程与应用的用户线程产生竞争关系,共同竞争处理器资源以及CPU的执行时间。GC线程不会对用户带来的任何价值,因此,好的GC应该占
J2EE监听器和过滤器基础
白糖_
J2EE
Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。
监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。
ServletContex监听器
ServletContex又叫application
博弈AngularJS讲义(16) - 提供者
boyitech
js AngularJS api Angular Provider
Angular框架提供了强大的依赖注入机制,这一切都是有注入器(injector)完成. 注入器会自动实例化服务组件和符合Angular API规则的特殊对象,例如控制器,指令,过滤器动画等。
那注入器怎么知道如何去创建这些特殊的对象呢? Angular提供了5种方式让注入器创建对象,其中最基础的方式就是提供者(provider), 其余四种方式(Value, Fac
java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
bylijinnan
java
public class CommonSubSequence {
/**
* 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
* 写一个版本算法复杂度O(N^2)和一个O(N) 。
*
* O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。
* O(
sqlserver 2000 无法验证产品密钥
Chen.H
sql windows SQL Server Microsoft
在 Service Pack 4 (SP 4), 是运行 Microsoft Windows Server 2003、 Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 服务器上您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体。 这样做, 收到以下错误信息CD KEY的 SQ
[新概念武器]气象战争
comsci
气象战争的发动者必须是拥有发射深空航天器能力的国家或者组织....
原因如下:
地球上的气候变化和大气层中的云层涡旋场有密切的关系,而维持一个在大气层某个层次
oracle 中 rollup、cube、grouping 使用详解
daizj
oracle grouping rollup cube
oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
技术资料汇总分享
Dead_knight
技术资料汇总 分享
本人汇总的技术资料,分享出来,希望对大家有用。
http://pan.baidu.com/s/1jGr56uE
资料主要包含:
Workflow->工作流相关理论、框架(OSWorkflow、JBPM、Activiti、fireflow...)
Security->java安全相关资料(SSL、SSO、SpringSecurity、Shiro、JAAS...)
Ser
初一下学期难记忆单词背诵第一课
dcj3sjt126com
english word
could 能够
minute 分钟
Tuesday 星期二
February 二月
eighteenth 第十八
listen 听
careful 小心的,仔细的
short 短的
heavy 重的
empty 空的
certainly 当然
carry 携带;搬运
tape 磁带
basket 蓝子
bottle 瓶
juice 汁,果汁
head 头;头部
截取视图的图片, 然后分享出去
dcj3sjt126com
OS Objective-C
OS 7 has a new method that allows you to draw a view hierarchy into the current graphics context. This can be used to get an UIImage very fast.
I implemented a category method on UIView to get the vi
MySql重置密码
fanxiaolong
MySql重置密码
方法一:
在my.ini的[mysqld]字段加入:
skip-grant-tables
重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysql
mysql>use mysql;
mysql>更新 user set password=password('新密码') WHERE User='root';
mysq
Ehcache(03)——Ehcache中储存缓存的方式
234390216
ehcache MemoryStore DiskStore 存储 驱除策略
Ehcache中储存缓存的方式
目录
1 堆内存(MemoryStore)
1.1 指定可用内存
1.2 驱除策略
1.3 元素过期
2 &nbs
spring mvc中的@propertysource
jackyrong
spring mvc
在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了:
@PropertySource 在spring 3.1中开始引入
比如有配置文件
config.properties
mongodb.url=1.2.3.4
mongodb.db=hello
则代码中
@PropertySource(&
重学单例模式
lanqiu17
单例 Singleton 模式
最近在重新学习设计模式,感觉对模式理解更加深刻。觉得有必要记下来。
第一个学的就是单例模式,单例模式估计是最好理解的模式了。它的作用就是防止外部创建实例,保证只有一个实例。
单例模式的常用实现方式有两种,就人们熟知的饱汉式与饥汉式,具体就不多说了。这里说下其他的实现方式
静态内部类方式:
package test.pattern.singleton.statics;
publ
.NET开源核心运行时,且行且珍惜
netcome
java .net 开源
背景
2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心
使用oscahe缓存技术减少与数据库的频繁交互
Everyday都不同
Web 高并发 oscahe缓存
此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。
缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——
Spring+Mybatis 手动控制事务
toknowme
mybatis
@Override
public boolean testDelete(String jobCode) throws Exception {
boolean flag = false;
&nbs
菜鸟级的android程序员面试时候需要掌握的知识点
xp9802
android
熟悉Android开发架构和API调用
掌握APP适应不同型号手机屏幕开发技巧
熟悉Android下的数据存储
熟练Android Debug Bridge Tool
熟练Eclipse/ADT及相关工具
熟悉Android框架原理及Activity生命周期
熟练进行Android UI布局
熟练使用SQLite数据库;
熟悉Android下网络通信机制,S