掌握CS和BS架构的特点
知道什么是服务器及常见的软件服务器
了解编程语言的时代发展
知道Java语言的特点
了解python语言的特点
了解XML的语法
了解JSON的特点和语法规则
知道如何使用SVN(Git)管理文件
两种常见的系统架构:
CS架构
BS架构
CS:(Client/Server) 客户端-服务器架构
优点:
能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所有CS客户端响应速度快
操作界面漂亮,形式多样,可以充分满足客户自身的个性化要求
能够实现复杂的业务流程
安全性能更容易保证
缺点:
需要专门的客户端安装程序,不方便实现快速部署安装和配置
兼容性差,不同的操作系统需要开发不同的程序代码
开发、维护成本高
BS:(Browser/Server)即浏览器-服务器架构,是伴随着Internet技术的兴起而发展起来的。
优点:
分布性强,客户端零维护;只要有网络、浏览器即可实现业务处理
业务扩展简单方便,通过增加网页即可增加服务器功能
维护简单方便,只需要改变网页,即可实现所有用户的同步更新
开发简单,共享性强
缺点
个性化特点明显降低,无法实现具有个性化的功能要求
在跨浏览器上,存在一定的兼容性
客户端服务器端的交互是请求-响应模式,响应速度低
在速度和安全性上需要花费巨大的设计成本
功能弱化,难以实现传统模式下的特殊功能要求
效率:c/s效率高,某些内容已经安装在系统中了,b/s每次都要加载最新的数据
升级:b/s无缝升级;c/s删除老版本再安装新版本
安全:c/s更安全,需要安装、注册、登录;b/s有浏览器即可使用,安全程度低
开发成本:b/s成本低;c/s需要不同的系统要不同的开发人员,成本高
我们通常所说的“服务器”可以从硬件和软件两个层面来理解:
硬件服务器:其实就是我们所说的电脑;任何一台电脑安装了软件并且可以对外提供服务就可以叫服务器;专业服务器需要专业的硬件和软件支持,性能高,价格也比较高
软件服务器:一个运行在硬件服务器上并为用户提供服务的计算机软件
提示:在不同的意境下,“服务器”代表着不同的含义;有时指的是硬件,有时指的是软件,有时指的是提供
服务的系统
软件服务器也可以称为服务器软件,不同类型的服务器软件能够提供不同的服务。常见的软件服务器有:
文件服务器:是指在计算机网络环境中,所有用户都可访问的文件存储设备,是一种专供其他电脑检索文件和存储的特殊电脑
数据库服务器:提供了对数据组织、存储和管理功能的服务器,比如Oracle、MySQL、Microsoft SQL Server等等
邮件服务器:邮件服务器是一种用来负责电子邮件收发管理的设备
FTP服务器:是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务
Web服务器:
严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容
常见的Web服务器有Nginx,Apache,IIS等等
应用服务器:
应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序
应用服务器一般也支持HTTP协议,能够实现Web服务器的功能
应用服务器可以处理业务逻辑,实现动态生成文档
常见的应用服务器有Tomcat、Weblogic、Jboss等等
编程语言(programming language)可以简单的理解为一种计算机和人都能识别的语言。
一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的
行动。
编程语言经历的时代一般分为:低级语言、高级语言和面向对象时代
时间:1946-1953
主要包括被称为“天书”的机器语言以及汇编语言
时间:1954-至今
随着世界上第一个高级语言fortran的出现,新的编程语言开始不断涌现出来
数十年来,全世界涌现了2500种以上高级语言,一些流行至今,一些则逐渐消失
代表语言:BASIC、C语言
时间:90年代初-至今
面向对象程序设计(Object-Oriented Programming,简称OOP)如今在整个程序设计中十分重要,其
最突出的特点为封装性、继承性和多态性
代表语言:Java、Python、go
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等
概念
Java语言具有功能强大和简单易用两个特征
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
近几年来,Java企业级应用飞速发展,主要被运用于电信、金融、交通、电商等大型项目平台建设
Python是一种跨平台的计算机程序设计语言
是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言
最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发
相对于Java语言更加简单易学
主要应用领域:大数据、人工智能、科学计算和统计、网络爬虫、软件开发等
简洁高效:Golang语言设计简洁,语法简单易学,同时编译速度快,执行效率高。
并发支持:Golang内置支持并发编程,可以轻松实现高并发、分布式系统。
跨平台支持:Golang可以在各种操作系统和硬件平台上运行,具有很好的跨平台兼容性。
生态丰富:Golang拥有丰富的标准库和第三方库,可以方便地实现各种功能和应用场景
链接:https://www.zhihu.com/question/578381580/answer/2931273555(百度介绍)
一种用于标记电子文件使其具有结构性的标记语言
可以用来标记数据,定义数据类型,允许用户对自己标记语言进行定义
提供统一的方法来描述和交换独立与应用程序或供应商的结构化数据
XML是纯文本,文件后缀名为:xml
实例
<?xml version="1.0" encoding="UTF-8" ?>
<node>
<db id="db" desc="三条边的长度都一样">
<b1>3</b1>
<b2>3</b2>
<b3>3</b3>
<expect>等边三角形</expect>
</db>
<dy>
<b1>4</b1>
<b2>4</b2>
<b3>5</b3>
<expect>等腰三角形</expect>
</dy>
</node>
XML 不是 HTML 的替代
XML 和 HTML 为不同的目的而设计:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
XML文档形成了一种树形结构,它从“根部”开始,然后扩展到“枝叶”
XML文档中第一行是 XML 声明,它定义 XML 的版本和所使用的编码。
<?xml version="1.0" encoding="UTF-8" ?>
<mail>
<from>张三</from>
<to>李四</to>
<subject>会议记录</subject>
<body>本次会议的主要内容有...</body>
</mail>
XML的主要语法规则包括:
XML文档必须有根元素
XML文档必须有一个元素是所有其他元素的父元素。该元素称为根元素
所有XML元素都须有结束标签
在HTML中经常会看到没有结束标签的元素,但是XML中省略结束标签是非法的
XML标签对大小写敏感
在XML中,标签 <Letter> 与标签 <letter> 是不同的
XML必须正确地嵌套
HTML中: <b><i>This text is bold and italic</b></i>
XML中,所有元素都必须彼此正确地嵌套: <b><i>This text is bold and italic</i></b>
XML的属性值须加引号
XML中的注释
在XML中编写注释的语法与HTML的语法很相似: <!-- This is a comment -->
<?xml version="1.0" encoding="UTF-8" ?>
<intro>
<name>小明</name>
<gender>男</gender>
<age>20</age>
<university>清华大学</university>
<pets>
<pet age="1">狗</pet>
<pet age="2">猫</pet>
<pet age="3">猪</pet>
</pets>
<luckyNumbers>
<number>2</number>
<number>5</number>
<number>8</number>
</luckyNumbers>
</intro>
JSON的全称是”JavaScript Object Notation”,是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
- JSON是纯文本
- JSON具有良好的自我描述性,便于阅读和编写
- JSON具有清晰的层级结构
- 有效地提升网络传输效率
大括号保存对象
中括号保存数组
对象数组可以相互嵌套
数据采用键值对表示
多个数据由逗号分隔
JSON的键必须是字符串类型,用英文双引号括起来
JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在中括号中)
对象(在大括号中)
null
{
"name": "tom",
"age": 18,
"isMan": true,
"school": null,
"address": {
"country": "中国",
"city": "江苏苏州",
"street": "科技园路"
},
"numbers": [2, 6, 8, 9],
"links": [
{
"name": "Baidu",
"url": "http://www.baidu.com"
},
{
"name": "TaoBao",
"url": "http://www.taobao.com"
}
]
}
备份数据不丢失
历史版本随时提取
版本如何同步简单
提交内容不会出现覆盖
一个开源的版本管理软件
可架设在Apache上,最常用的客户端为TortoiseSVN(简称TSVN)
服务器端:CollabNet的SVN服务器端安装包(内含Apache2.2)
推荐使用TortoiseSVN(以下简称TSVN)
可通过TSVN进行读、写操作
可通过IE浏览器进行读操作
可通过各种插件与开发工具集成
安装文件:
TSVN客户端:
TortoiseSVN-1.6.8.19260-win32-svn-1.6.11.msi
TSVN中文语言包:
LanguagePack_1.6.8.19260-win32-zh_CN.msi
全部选择默认安装,安装完成后重启电脑
TSVN通过右键菜单与Windows资源管理器集成,没有自己的窗口界面
在相应文件夹内新建一个文件夹,用于存储数据
在新建文件夹上点右键,选择“TortoiseSVN-在此创建版本库”,TSVN会在此文件夹内建立若干控制文件。
检出用于客户端第一次从SVN服务器上下载版本库数据
在客户端新建一个文件夹用于存放下载的数据
在新建文件夹上点右键,选择“SVN检出"
“更新”用于客户端从SVN服务器下载最新版本
在受SVN控制的某层文件夹上(或文件夹内空白处)点右键,选择“SVN更新”,TSVN自动比较该文件夹客户端与服务器版本差异,并下载最新版本到客户端
提交用于将客户端的改动上传到SVN服务器
在受SVN控制的某层文件夹上(或文件夹内空白处,或某文件上)点右键,选择“SVN提交…”
在受SVN控制的某层文件夹上(或文件夹内空白处,或新增的某文件上)点右键,选择“TortoiseSVN-增加”
“删除”仅是对客户端的文件进行操作,并不改变服务器上的内容,需要执行“提交”操作才会将删除操作上传到服务器
将“删除”操作“提交”到服务器后,仅是从服务器的最新版本中删除了此文件或文件夹,在历史版本中仍可找回此文件或文件夹
改名”仅是对客户端的文件进行操作,并不改变服务器上的内容,需要执行“提交”操作才会将改名操作上传到服务器
不要用Windows“重命名”来实现改名,因为这个操作不受SVN控制,SVN会将其理解为删除原文件、增加一个新文件,从而导致文件改名后不能跟踪到改名前的状态
移动用于在受SVN控制的状态下,移动文件或文件夹的位置
在受SVN控制的某层文件夹或文件上点右键,选择“TortoiseSVN-版本库浏览器”
在弹出窗口拖动文件夹或文件到需要的位置
由于是对服务器版本库直接操作,移动后将自动执行一次“提交”操作
移动完成后需要在客户端执行一次“更新”,以下载最新状态
是一个开源分布式版本控制系统,市面上大多数公司现在已经不用SVN了,采用了Git来进行项目的版本管理跟控制,可以更快,有效,的处理项目版本管理
创建版本库:
git init
提交
git commit
管理分支
git branch 文件名
创建分支
git checkout 文件名
PS:git的使用方法这边就不占用太多的篇幅去对它进行一个描述,简单的写了几个命令,大家了解一些两个工具就行了,后续有需要可以出一篇怎么使用git,github ,gitee的教程
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题: