- CentOS7下安装python3.8
讓丄帝愛伱
Linux编程语言
查看系统版本#查看系统版本cat/etc/centos-release>CentOSLinuxrelease7.2.1511(Core)uname-a>Linuxlocalhost.localdomain3.10.0-327.el7.x86_64#1SMPThuNov1922:10:57UTC2015x86_64x86_64x86_64GNU/Linux#查看python版本python-V>Py
- DJANGO 中间件的白名单配置
换个网名有点难
djangopython
在处理白名单内的多个Apps的URL链接时,可以采用以下几种方法来简化白名单的配置:1.使用reverse动态获取URL如果你在urls.py中为每个App的URL定义了名称(name参数),可以使用reverse函数动态获取这些URL,而不是硬编码路径。这样可以避免手动维护大量的路径字符串。Python复制fromdjango.urlsimportreverseclassLoginRequire
- Linux常见命令
周雨濛
linux
1.查看IP地址1.ipa2.ifconfig2.切换用户1.su-lHOSTNAME---同时切换当前路径2.suHOSTNAME---只切换用户不切换路径3.su---直接切换到管理员3.远程连接XShell界面1.sshIP地址ssh192.168.1.12.sshHOSTNAME@主机
[email protected]新建会话4.查看当前终端设备文件名tty1、/
- 进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)
是帅帅的少年
东方博宜OJ题库解析算法c++数据结构
题单地址:题单中心-东方博宜OJ这里以二进制转十进制为例(按位加权求和法)1290.二进制转换十进制问题描述请将一个25位以内的2进制正整数转换为1010进制!输入一个25位以内的二进制正整数。输出该数对应的十进制。样例输入111111111111111111111111输出16777215解析:按位加权(2^n)求和法。#includeusingnamespacestd;intmain(){st
- 红宝书第十一讲:超易懂版「ES6类与继承」零基础教程:用现实例子+图解实现
kovlistudio
前端es6javascript开发语言前端学习
红宝书第十一讲:超易懂版「ES6类与继承」零基础教程:用现实例子+图解实现资料取自《JavaScript高级程序设计(第5版)》。查看总目录:红宝书学习大纲一、ES6类的核心语法:把事物抽象成“模板”想象你要设计一款「动物养成游戏」,需要创建多种动物对象。ES6的class就是一个代码模板://基础类(Animal是模板,有名称和吃东西方法)classAnimal{constructor(name
- Next:Error: Image with src “https://via.placeholder.com/50“ is missing required “height“ property.
dingcho
前端SEOreact前端mui
在Next.js中使用next/image组件时,需要同时提供width和height属性,或者使用fill属性。你遇到的错误提示表明缺少height属性,下面是修正后的代码:setIsLoading(false)}onError={()=>setIsLoading(false)}/>
- JS获取URL中参数值的4种方法
夕阳_醉了
javascript前端html
方法1:现代浏览器都支持URL和URLSearchParams对象,可以很方便地从URL中提取参数//假设当前URL为"https://example.com/?name=John&age=30"consturl=newURL(window.location.href);//或者你可以直接传入一个URL字符串constname=url.searchParams.get('name');//"Joh
- Js 获取url的参数值
程序猿老罗
前端前端javascript
Js获取url的参数值,支持获取中文的值。//获取url中的参数值functiongetUrlParam(name){name=name.replace(/[\[\]]/g,"\\$&");varregex=newRegExp("[?&]"+name+"(=([^]*)|&|#|$)");varresults=regex.exec(window.location.href);if(!resul
- c++ Templates Guide
Benny.LIU
c++template
c++TemplatesGuide前言FunctionTemplatesClassTemplatesNontypeTemplateParametersTrickyBasicsUsingTemplatesinPracticeBasicTemplateTerminology前言Typeparametersareintroducedwitheitherthekeywordtypenameorthekey
- 蓝桥OJ3197 方格染色
秭霏鱼
c++
//coutusingnamespacestd;usingll=longlong;constllp=1000000007;constintN=1e7+9;lln,m;llqmi(lla,llb){llres=1;while(b){if(b&1){res=res*a%p;}a=a*a%p,b>>=1;}returnres;}//llinv(llx){//returnqmi(x,p-2);//}int
- MySQL基本语句
冉冉柟
mysql数据库oracle
一、DDL(数据定义语言)DDL主要用于定义数据库、表、视图、索引等数据库对象的结构1.1创建数据库CREATEDATABASEdatabase_name;1.2删除数据库DROPDATABASEdatabase_name;1.3选择数据库USEdatabase_name;1.4创建表CREATETABLEtable_name( column1datatypeconstraint, column2
- current宏及Linux进程栈的底层实现
Leon_George
linux运维
1.current宏的实现#ifndef__ASSEMBLY__structtask_struct;//用于在编译时候声明一个perCPU变量,该变量被放在一个特殊的段中,原型为DECLARE_PER_CPU(type,name),主要作用是为处理器创建一个type类型,名为name的变量。DECLARE_PER_CPU(structtask_struct*,current_task);stati
- 一文搞懂python中常用的装饰器(@classmethod、@property、@staticmethod、@abstractmethod......)
NosONE
pythonpython
本文分为两部分,第一部分是介绍python中常见的装饰器。另一部分是自定义装饰器,包括了一些非常好用的自定义装饰器。一文搞懂python中常用的装饰器常见的几个装饰器介绍及示例@classmethod装饰器基本用法@property、@setter装饰器基本用法@staticmethod装饰器基本用法@abstractmethod装饰器基本用法自定义装饰器类装饰器非常好用的自定义装饰器常见的几个装
- Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding
CCLZMY
python开发语言后端
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入D:\Metag
- C++避坑指南-数组越界
飞天赤狐
C++避坑指南c++
问题场景在访问数组时没有判断数组size,导致访问的索引号超过了数组size产生访问越界,程序出现异常行为示例代码实际情况比较多,我们来展开说明下原生数组访问越界#includeusingnamespacestd;voidArrayOut(){inta[]={23,33,1,32,5,9,10};for(inti=0;ia({23,33,1,32,5,9,10});for(inti=0;iempt
- 一个普通的vue权限管理方案-菜单权限控制
han_hanker
vue.js前端javascript
渲染左侧菜单0&&sidebar.name!==sidebar.children[0].name">{{sidebar.meta.title}}0">{{child1.meta.title}}{{child.name}}{{child1.name}}{{sidebar.name}}import{getUserFuncPerm}from'@/api/user'exportdefault{name:'
- Vue3-笔记002-Ref与Reactive
·焱·
vue3学习笔记笔记vue.jsjavascript
002-Ref与Reactive-目录Refref案例ref与RefifRefshallowReftriggerRefcustomRefdom元素的refReactive与ref的共同点与ref的不同点数组的异步赋值问题readonlyshallowReactivetoReftoRefstoRawRef接受一个内部值并返回一个响应式且可变的ref对象。ref对象仅有一个.valueproperty
- Vue3-day3-Ref-Reactive
金串串
vue.jsjavascript前端
Ref:创建基本类型的响应式数据作用:定义响应式变量语法:letxxx=ref(初始值)返回值:一个RefImpl的实例对象,简称ref对象或者ref,ref对象的value属性是响应式的注意点:js中操作数据需要:xxx.value,但模板中不需要.value,直接使用即可。对于letname=ref('张三')来说,name不是响应式的,name.value是响应式的。代码段姓名:{{name
- Kotlin内联函数inline、noinline、crossinline
hc.Geng
kotlin开发语言android
高阶函数首先来看下kotlin里的高阶函数定义:如果一个函数接收另一个函数作为参数,或返回类型是一个函数类型,那么该函数被称为是高阶函数。比如下面的代码:privatefunhighFuc(name:String,block:(String)->Unit){block(name)}其中highFuc是函数名,函数中传入了2个参数,第一个参数为String类型,第二个参数即是函数类型,->左边的部分
- el-select多选选择器(在懒加载的基础上) 重磅:实现模糊搜索+多选+未加载数据的正确回显!!
SerendipityM
javascript前端开发语言vue.jshtml5
项目需求:由于表单中的一个el-select中的数据过多,下拉框用户体验不好,因此需要做成有懒加载且分页的下拉框。后又因为该功能需要多选,并且打开表单要能够正确回显。这些需求加起来,导致问题变得复杂起来。我在网上也看了许多文章,没有找到好的解决方案。因此我将自己的记录下来,还望各位指点!!!(本项目请求后端需要传id,page,size,name)(name的格式为JSON形式的[id:1,nam
- C++中函数模板与类模板的简单使用
CoderIsArt
C++11c++函数模板类模板
在C++中,模板是实现泛型编程的核心机制,允许开发者编写与类型无关的代码。以下是函数模板和类模板的详细介绍及实际示例。一、函数模板定义函数模板通过参数化类型实现泛型操作,只需编写一次代码即可处理多种数据类型,避免重复。语法template返回类型函数名(参数列表){...}typenameT表示类型占位符,编译时根据实参类型自动实例化。真实示例交换两个值(swap)templatevoidswa
- 如何更优雅构建对象?
我梦见你梦见我°
java开发语言
1.使用Lombok的@Builder注解Lombok的@Builder是一种非常简洁且强大的工具,可以自动生成Builder模式的代码。它避免了手动编写大量样板代码,并且支持链式调用和不可变对象的设计。@Data@NoArgsConstructor@AllArgsConstructor@BuilderpublicclassPerson{privateStringname;privateintag
- 如何采集来赞达Lazada虾皮shopee各区域商品详情页面数据
古德猫宁的干货
数据库APIlazada商品详情shopee商品详情
以虾皮shopee根据ID取商品详情API返回值说明为例shopee.item_get公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)注册Key和secret接入secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheStrin
- 虾皮shopee根据关键词取商品列表 API
分享干货的猫
网站搭建apiapi接口java开发语言虾皮api接口虾皮api
一、参数公共参数请求地址:https://api-gw.onebound.cn/shopee/item_search(前往获取key和secret)名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_sho
- 商品详情中除了价格和库存,还有哪些重要信息?
数据小爬虫@
大数据
在获取商品详情时,除了价格和库存,还有许多其他重要信息可以帮助我们更全面地了解商品。这些信息对于市场调研、数据分析、商品比较以及用户体验优化等都非常有价值。以下是一些常见的商品详情字段及其重要性:1.商品名称(Name)重要性:商品名称是用户识别商品的关键信息,也是搜索引擎优化(SEO)的重要部分。应用场景:用于展示商品、搜索优化、分类整理等。2.商品描述(Description)重要性:详细的商
- table合并行
花归去
vue3elementvue.jsjavascriptelementui
{{scope.row.gdLength/10}}importtype{TableColumnCtx}from'element-plus';consttableData=[{"id":6140,"projectId":1306,"projectName":"","sectionId":12985,"sectionName":"YYZQ-9标","tunnelId":96160,"tunnelNam
- Linux内核srio驱动,Zynq—Linux移植学习笔记(十四):RapidIO驱动开发
weixin_39942572
Linux内核srio驱动
#defineDRIVER_NAME"xiic-rio"#defineSRIO_ZYNQ_BASEADDR0x40000000#defineSRIO_ZYNQ_NODE_BASEADDR0x10100#defineSRIO_ZYNQ_MAX_HOPCOUNT13structxiic_rio{structmutexlock;u8*data;};/*Weneedglobalvarriableforma
- C++/C语言判断重复数组(zznu)⭐
*TQK*
算法练习c++c语言数据结构
问题描述如果一个数组中不包含重复的元素,那么我们称这个数组是独ONE无TWO的数组。给定一个数组,请你判断这个数组是否是独ONE无TWO的。输入首先输入一个正整数n表示数组的长度(0//包含常用的头文件usingi68=longlong;//定义别名,但在此代码中未使用usingnamespacestd;//定义宏,用于获取容器的大小#definesz(x)(int)x.size()//定义宏,用
- C++|向函数传递对象
柯ran
C++程序设计c++开发语言
在C++里,对象作为函数的参数和返回值,有值传递、指针传递和引用传递这三种传递方式,下面为你详细介绍。1.值传递在值传递时,把实参对象的值复制给形参对象,函数会接收实参的一个副本,而非实参本身。函数内对形参的修改不会影响到实参。#includeusingnamespacestd;classMyClass{public:intvalue;MyClass(intval):value(val){}};/
- go debug日记:protoc -I . helloworld.proto --go_out=plugins=grpc:.错误debug
fcopy
golang学习golang开发语言后端
使用protoc生成go的文件出现bug运行命令protoc-I.helloworld.proto--go_out=plugins=grpc:.如图所示即,没有指定生成的go文件位置,需要在文件中添加optiongo_package="path;name";其中path表示生成的go文件的存放地址,会自动生成目录的。name表示生成的go文件所属的包名之后运行protoc-I.helloworld
- java工厂模式
3213213333332132
java抽象工厂
工厂模式有
1、工厂方法
2、抽象工厂方法。
下面我的实现是抽象工厂方法,
给所有具体的产品类定一个通用的接口。
package 工厂模式;
/**
* 航天飞行接口
*
* @Description
* @author FuJianyong
* 2015-7-14下午02:42:05
*/
public interface SpaceF
- nginx频率限制+python测试
ronin47
nginx 频率 python
部分内容参考:http://www.abc3210.com/2013/web_04/82.shtml
首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出)。nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开。步骤如下:
- java线程和线程池的使用
dyy_gusi
ThreadPoolthreadRunnabletimer
java线程和线程池
一、创建多线程的方式
java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类。其实Thread类自己也是实现了Runnable接口。具体使用实例如下:
1、通过实现Runnable接口方式 1 2
- Linux
171815164
linux
ubuntu kernel
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.2-unstable/
安卓sdk代理
mirrors.neusoft.edu.cn 80
输入法和jdk
sudo apt-get install fcitx
su
- Tomcat JDBC Connection Pool
g21121
Connection
Tomcat7 抛弃了以往的DBCP 采用了新的Tomcat Jdbc Pool 作为数据库连接组件,事实上DBCP已经被Hibernate 所抛弃,因为他存在很多问题,诸如:更新缓慢,bug较多,编译问题,代码复杂等等。
Tomcat Jdbc P
- 敲代码的一点想法
永夜-极光
java随笔感想
入门学习java编程已经半年了,一路敲代码下来,现在也才1w+行代码量,也就菜鸟水准吧,但是在整个学习过程中,我一直在想,为什么很多培训老师,网上的文章都是要我们背一些代码?比如学习Arraylist的时候,教师就让我们先参考源代码写一遍,然
- jvm指令集
程序员是怎么炼成的
jvm 指令集
转自:http://blog.csdn.net/hudashi/article/details/7062675#comments
将值推送至栈顶时 const ldc push load指令
const系列
该系列命令主要负责把简单的数值类型送到栈顶。(从常量池或者局部变量push到栈顶时均使用)
0x02 &nbs
- Oracle字符集的查看查询和Oracle字符集的设置修改
aijuans
oracle
本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货
- png在Ie6下透明度处理方法
antonyup_2006
css浏览器FirebugIE
由于之前到深圳现场支撑上线,当时为了解决个控件下载,我机器上的IE8老报个错,不得以把ie8卸载掉,换个Ie6,问题解决了,今天出差回来,用ie6登入另一个正在开发的系统,遇到了Png图片的问题,当然升级到ie8(ie8自带的开发人员工具调试前端页面JS之类的还是比较方便的,和FireBug一样,呵呵),这个问题就解决了,但稍微做了下这个问题的处理。
我们知道PNG是图像文件存储格式,查询资
- 表查询常用命令高级查询方法(二)
百合不是茶
oracle分页查询分组查询联合查询
----------------------------------------------------分组查询 group by having --平均工资和最高工资 select avg(sal)平均工资,max(sal) from emp ; --每个部门的平均工资和最高工资
- uploadify3.1版本参数使用详解
bijian1013
JavaScriptuploadify3.1
使用:
绑定的界面元素<input id='gallery'type='file'/>$("#gallery").uploadify({设置参数,参数如下});
设置的属性:
id: jQuery(this).attr('id'),//绑定的input的ID
langFile: 'http://ww
- 精通Oracle10编程SQL(17)使用ORACLE系统包
bijian1013
oracle数据库plsql
/*
*使用ORACLE系统包
*/
--1.DBMS_OUTPUT
--ENABLE:用于激活过程PUT,PUT_LINE,NEW_LINE,GET_LINE和GET_LINES的调用
--语法:DBMS_OUTPUT.enable(buffer_size in integer default 20000);
--DISABLE:用于禁止对过程PUT,PUT_LINE,NEW
- 【JVM一】JVM垃圾回收日志
bit1129
垃圾回收
将JVM垃圾回收的日志记录下来,对于分析垃圾回收的运行状态,进而调整内存分配(年轻代,老年代,永久代的内存分配)等是很有意义的。JVM与垃圾回收日志相关的参数包括:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc
-XX:+PrintGC
通
- Toast使用
白糖_
toast
Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。
创建Toast
两个方法创建Toast
makeText(Context context, int resId, int duration)
参数:context是toast显示在
- angular.identity
boyitech
AngularJSAngularJS API
angular.identiy 描述: 返回它第一参数的函数. 此函数多用于函数是编程. 使用方法: angular.identity(value); 参数详解: Param Type Details value
*
to be returned. 返回值: 传入的value 实例代码:
<!DOCTYPE HTML>
- java-两整数相除,求循环节
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class CircleDigitsInDivision {
/**
* 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
- Java 日期 周 年
Chen.H
javaC++cC#
/**
* java日期操作(月末、周末等的日期操作)
*
* @author
*
*/
public class DateUtil {
/** */
/**
* 取得某天相加(减)後的那一天
*
* @param date
* @param num
*
- [高考与专业]欢迎广大高中毕业生加入自动控制与计算机应用专业
comsci
计算机
不知道现在的高校还设置这个宽口径专业没有,自动控制与计算机应用专业,我就是这个专业毕业的,这个专业的课程非常多,既要学习自动控制方面的课程,也要学习计算机专业的课程,对数学也要求比较高.....如果有这个专业,欢迎大家报考...毕业出来之后,就业的途径非常广.....
以后
- 分层查询(Hierarchical Queries)
daizj
oracle递归查询层次查询
Hierarchical Queries
If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause:
hierarchical_query_clause::=
start with condi
- 数据迁移
daysinsun
数据迁移
最近公司在重构一个医疗系统,原来的系统是两个.Net系统,现需要重构到java中。数据库分别为SQL Server和Mysql,现需要将数据库统一为Hana数据库,发现了几个问题,但最后通过努力都解决了。
1、原本通过Hana的数据迁移工具把数据是可以迁移过去的,在MySQl里面的字段为TEXT类型的到Hana里面就存储不了了,最后不得不更改为clob。
2、在数据插入的时候有些字段特别长
- C语言学习二进制的表示示例
dcj3sjt126com
cbasic
进制的表示示例
# include <stdio.h>
int main(void)
{
int i = 0x32C;
printf("i = %d\n", i);
/*
printf的用法
%d表示以十进制输出
%x或%X表示以十六进制的输出
%o表示以八进制输出
*/
return 0;
}
- NsTimer 和 UITableViewCell 之间的控制
dcj3sjt126com
ios
情况是这样的:
一个UITableView, 每个Cell的内容是我自定义的 viewA viewA上面有很多的动画, 我需要添加NSTimer来做动画, 由于TableView的复用机制, 我添加的动画会不断开启, 没有停止, 动画会执行越来越多.
解决办法:
在配置cell的时候开始动画, 然后在cell结束显示的时候停止动画
查找cell结束显示的代理
- MySql中case when then 的使用
fanxiaolong
casewhenthenend
select "主键", "项目编号", "项目名称","项目创建时间", "项目状态","部门名称","创建人"
union
(select
pp.id as "主键",
pp.project_number as &
- Ehcache(01)——简介、基本操作
234390216
cacheehcache简介CacheManagercrud
Ehcache简介
目录
1 CacheManager
1.1 构造方法构建
1.2 静态方法构建
2 Cache
2.1&
- 最容易懂的javascript闭包学习入门
jackyrong
JavaScript
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
下面就是我的学习笔记,对于Javascript初学者应该是很有用的。
一、变量的作用域
要理解闭包,首先必须理解Javascript特殊
- 提升网站转化率的四步优化方案
php教程分享
数据结构PHP数据挖掘Google活动
网站开发完成后,我们在进行网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。文中分享了四大优化策略:调查、研究、优化、评估,这四大策略可以很好地帮助用户设计出高效的优化方案。
PHP开发的网站优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果。今天,我就分
- web开发里什么是HTML5的WebSocket?
naruto1990
Webhtml5浏览器socket
当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服
- Socket初步编程——简单实现群聊
Everyday都不同
socket网络编程初步认识
初次接触到socket网络编程,也参考了网络上众前辈的文章。尝试自己也写了一下,记录下过程吧:
服务端:(接收客户端消息并把它们打印出来)
public class SocketServer {
private List<Socket> socketList = new ArrayList<Socket>();
public s
- 面试:Hashtable与HashMap的区别(结合线程)
toknowme
昨天去了某钱公司面试,面试过程中被问道
Hashtable与HashMap的区别?当时就是回答了一点,Hashtable是线程安全的,HashMap是线程不安全的,说白了,就是Hashtable是的同步的,HashMap不是同步的,需要额外的处理一下。
今天就动手写了一个例子,直接看代码吧
package com.learn.lesson001;
import java
- MVC设计模式的总结
xp9802
设计模式mvc框架IOC
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]
(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户