当前位置: 首页 > news >正文

经典网站设计有什么网站建设软件有哪些

经典网站设计,有什么网站建设软件有哪些,十大那种直播软件,巴中住房建设部网站面向对象的”六原则一法则” - 单一职责原则#xff1a;一个类只做它该做的事情。#xff08;单一职责原则想表达的就是”高内聚”#xff0c;写代码最终极的原则只有六个字”高内聚、低耦合”#xff0c;所谓的高内聚就是一个代码模块只完成一项功能#xff0c;在面向对象… 面向对象的”六原则一法则” - 单一职责原则一个类只做它该做的事情。单一职责原则想表达的就是”高内聚”写代码最终极的原则只有六个字”高内聚、低耦合”所谓的高内聚就是一个代码模块只完成一项功能在面向对象中如果只让一个类完成它该做的事而不涉及与它无关的领域就是践行了高内聚的原则这个类就只有单一职责。这个世界上任何好的东西都有两个特征一个是功能单一好的相机绝对不是电视购物里面卖的那种一个机器有一百多种功能的它基本上只能照相另一个是模块化好的自行车是组装车从减震叉、刹车到变速器所有的部件都是可以拆卸和重新组装的好的乒乓球拍也不是成品拍一定是底板和胶皮可以拆分和自行组装的一个好的软件系统它里面的每个功能模块也应该是可以轻易的拿到其他系统中使用的这样才能实现软件复用的目标。 - 开闭原则软件实体应当对扩展开放对修改关闭。在理想的状态下当我们需要为一个软件系统增加新功能时只需要从原来的系统派生出一些新类就可以不需要修改原来的任何一行代码。要做到开闭有两个要点①抽象是关键一个系统中如果没有抽象类或接口系统就没有扩展点②封装可变性将系统中的各种可变因素封装到一个继承结构中如果多个可变因素混杂在一起系统将变得复杂而换乱。 - 依赖倒转原则面向接口编程。该原则说得直白和具体一些就是声明方法的参数类型、方法的返回类型、变量的引用类型时尽可能使用抽象类型而不用具体类型因为抽象类型可以被它的任何一个子类型所替代请参考下面的里氏替换原则。 里氏替换原则任何时候都可以用子类型替换掉父类型。关于里氏替换原则的描述Barbara Liskov女士的描述比这个要复杂得多但简单的说就是能用父类型的地方就一定能使用子类型。里氏替换原则可以检查继承关系是否合理如果一个继承关系违背了里氏替换原则那么这个继承关系一定是错误的需要对代码进行重构。例如让猫继承狗或者狗继承猫又或者让正方形继承长方形都是错误的继承关系因为你很容易找到违反里氏替换原则的场景。需要注意的是子类一定是增加父类的能力而不是减少父类的能力因为子类比父类的能力更多把能力多的对象当成能力少的对象来用当然没有任何问题。 - 接口隔离原则接口要小而专绝不能大而全。臃肿的接口是对接口的污染既然接口表示能力那么一个接口只应该描述一种能力接口也应该是高度内聚的。例如琴棋书画就应该分别设计为四个接口而不应设计成一个接口中的四个方法因为如果设计成一个接口中的四个方法那么这个接口很难用毕竟琴棋书画四样都精通的人还是少数而如果设计成四个接口会几项就实现几个接口这样的话每个接口被复用的可能性是很高的。Java中的接口代表能力、代表约定、代表角色能否正确的使用接口一定是编程水平高低的重要标识。 - 合成聚合复用原则优先使用聚合或合成关系复用代码。通过继承来复用代码是面向对象程序设计中被滥用得最多的东西因为所有的教科书都无一例外的对继承进行了鼓吹从而误导了初学者类与类之间简单的说有三种关系Is-A关系、Has-A关系、Use-A关系分别代表继承、关联和依赖。其中关联关系根据其关联的强度又可以进一步划分为关联、聚合和合成但说白了都是Has-A关系合成聚合复用原则想表达的是优先考虑Has-A关系而不是Is-A关系复用代码需要说明的是即使在Java的API中也有不少滥用继承的例子例如Properties类继承了Hashtable类Stack类继承了Vector类这些继承明显就是错误的更好的做法是在Properties类中放置一个Hashtable类型的成员并且将其键和值都设置为字符串来存储数据而Stack类的设计也应该是在Stack类中放一个Vector对象来存储数据。记住任何时候都不要继承工具类工具是可以拥有并可以使用的而不是拿来继承的。  - 迪米特法则迪米特法则又叫最少知识原则一个对象应当对其他对象有尽可能少的了解。迪米特法则简单的说就是如何做到”低耦合”门面模式和调停者模式就是对迪米特法则的践行。对于门面模式可以举一个简单的例子你去一家公司洽谈业务你不需要了解这个公司内部是如何运作的你甚至可以对这个公司一无所知去的时候只需要找到公司入口处的前台美女告诉她们你要做什么她们会找到合适的人跟你接洽前台的美女就是公司这个系统的门面。再复杂的系统都可以为用户提供一个简单的门面Java Web开发中作为前端控制器的Servlet或Filter不就是一个门面吗浏览器对服务器的运作方式一无所知但是通过前端控制器就能够根据你的请求得到相应的服务。调停者模式也可以举一个简单的例子来说明例如一台计算机CPU、内存、硬盘、显卡、声卡各种设备需要相互配合才能很好的工作但是如果这些东西都直接连接到一起计算机的布线将异常复杂在这种情况下主板作为一个调停者的身份出现它将各个设备连接在一起而不需要每个设备之间直接交换数据这样就减小了系统的耦合度和复杂度如下图所示。迪米特法则用通俗的话来将就是不要和陌生人打交道如果真的需要找一个自己的朋友让他替你和陌生人打交道。 GC是什么为什么要有GC Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理因为垃圾收集器会自动进行管理。要请求垃圾收集可以调用下面的方法之一System.gc() 或Runtime.getRuntime().gc() 但JVM可以屏蔽掉显示的垃圾回收调用。 垃圾回收可以有效的防止内存泄露有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 垃圾回收机制有很多种包括分代复制垃圾回收、标记垃圾回收、增量垃圾回收等方式。标准的Java进程既有栈又有堆。栈保存了原始型局部变量堆保存了要创建的对象。Java平台对堆内存回收和再利用的基本算法被称为标记和清除但是Java对其进行了改进采用“分代式垃圾收集”。这种方法会跟Java对象的生命周期将堆内存划分为不同的区域在垃圾收集过程中可能会将对象移动到不同区域 - 伊甸园Eden这是对象最初诞生的区域并且对大多数对象来说这里是它们唯一存在过的区域。 - 幸存者乐园Survivor从伊甸园幸存下来的对象会被挪到这里。 - 终身颐养园Tenured这是足够老的幸存对象的归宿。年轻代收集Minor-GC过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时就会触发一次完全收集Full-GC这里可能还会牵扯到压缩以便为大对象腾出足够的空间。 -方法区Class和常量池(Major-GC) 与垃圾回收相关的JVM参数 -Xms / -Xmx — 堆的初始大小 / 堆的最大大小-Xmn — 堆中年轻代的大小-XX:-DisableExplicitGC — 让System.gc()不产生任何作用-XX:PrintGCDetails — 打印GC的细节-XX:PrintGCDateStamps — 打印GC操作的时间戳-XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小-XX:NewRatio — 可以设置老生代和新生代的比例-XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布-XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold设置老年代阀值的初始值和最大值-XX:TargetSurvivorRatio设置幸存区的目标使用率 如何实现对象克隆  有两种方式   1). 实现Cloneable接口并重写Object类中的clone()方法   2). 实现Serializable接口通过对象的序列化和反序列化实现克隆可以实现真正的深度克隆。 Java 中会存在内存泄漏 理论上Java因为有垃圾回收机制GC不会存在内存泄露问题这也是Java被广泛使用于服务器端编程的一个重要原因然而在实际开发中可能会存在无用但可达的对象这些对象不能被GC回收因此也会导致内存泄露的发生。例如hibernate的Session一级缓存中的对象属于持久态垃圾回收器是不会回收这些对象的然而这些对象中可能存在无用的垃圾对象如果不及时关闭close或清空flush一级缓存就可能导致内存泄露。  描述一下JVM加载class文件的原理机制 JVM中类的装载是由类加载器ClassLoader和它的子类来实现的。由于Java的跨平台性经过编译的Java源程序并不是一个可执行程序而是一个或多个类文件。当Java程序需要使用某个类时JVM会确保这个类已经被加载、连接验证、准备和解析和初始化。类的加载是指把类的.class文件中的数据读入到内存中通常是创建一个字节数组读入.class文件然后产生与所加载类对应的Class对象。加载完成后Class对象还不完整所以此时的类还不可用。当类被加载后就进入连接阶段这一阶段包括验证、准备为静态变量分配内存并设置默认的初始值和解析将符号引用替换为直接引用三个步骤。最后JVM对类进行初始化初始化时机包括1)如果类存在直接的父类并且这个类还没有被初始化那么就先初始化父类2)如果类中存在初始化语句就依次执行这些初始化语句(5条语句newstaticreflect等)。  类的加载是由类加载器完成的类加载器包括根加载器BootStrap、扩展加载器Extension、系统加载器System和用户自定义类加载器java.lang.ClassLoader的子类。类加载过程采取了父亲委托机制PDM。PDM更好的保证了Java平台的安全性在该机制中JVM自带的Bootstrap是根加载器其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。 如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)? a. 连接点Joinpoint程序执行的某个特定位置如某个方法调用前、调用后方法抛出异常后。一个类或一段程序代码拥有一些具有边界性质的特定点这些代码中的特定点就是连接点。Spring仅支持方法的连接点。 b. 切点Pointcut如果连接点相当于数据中的记录那么切点相当于查询条件一个切点可以匹配多个连接点。Spring AOP的规则解析引擎负责解析切点所设定的查询条件找到对应的连接点。 c. 增强Advice增强是织入到目标类连接点上的一段程序代码。Spring提供的增强接口都是带方位名的如BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。 d. 引介Introduction引介是一种特殊的增强它为类添加一些属性和方法。这样即使一个业务类原本没有实现某个接口通过引介功能可以动态的未该业务类添加接口的实现逻辑让业务类成为这个接口的实现类。 e. 织入Weaving织入是将增强添加到目标类具体连接点上的过程AOP有三种织入方式①编译期织入需要特殊的Java编译期例如AspectJ的ajc②装载期织入要求使用特殊的类加载器在装载类的时候对类进行增强③运行时织入在运行时为目标类生成代理实现增强。Spring采用了动态代理的方式实现了运行时织入而AspectJ采用了编译期织入和装载期织入的方式。 f. 切面Aspect切面是由切点和增强引介组成的它包括了对横切关注功能的定义也包括了对连接点的定义。 如何在Web项目中配置Spring的IoC容器 如果需要在Web项目中使用Spring的IoC容器可以在Web项目配置文件web.xml中做出如下配置 context-param     param-namecontextConfigLocation/param-name     param-valueclasspath:applicationContext.xml/param-value /context-param   listener     listener-class         org.springframework.web.context.ContextLoaderListener     /listener-class /listener 使用tomcat的监听器ContextLoaderListener(实现ContextLoaderListener)初始化spring ioc 如何在Web项目中配置Spring MVC 要使用Spring MVC需要在Web项目配置文件中配置其前端控制器DispatcherServlet如下所示 web-app     servlet         servlet-nameexample/servlet-name         servlet-class             org.springframework.web.servlet.DispatcherServlet         /servlet-class         load-on-startup1/load-on-startup     /servlet     servlet-mapping         servlet-nameexample/servlet-name         url-pattern*.html/url-pattern     /servlet-mapping  /web-app 说明上面的配置中使用了*.html的后缀映射这样做一方面不能够通过URL推断采用了何种服务器端的技术另一方面可以欺骗搜索引擎因为搜索引擎不会搜索动态页面这种做法称为伪静态化。 大型网站在架构上应当考虑哪些问题 - 分层分层是处理任何复杂系统最常见的手段之一将系统横向切分成若干个层面每个层面只承担单一的职责然后通过下层为上层提供的基础设施和服务以及上层对下层的调用来形成一个完整的复杂的系统。计算机网络的开放系统互联参考模型OSI/RM和Internet的TCP/IP模型都是分层结构大型网站的软件系统也可以使用分层的理念将其分为持久层提供数据存储和访问服务、业务层处理业务逻辑系统中最核心的部分和表示层系统交互、视图展示。需要指出的是1分层是逻辑上的划分在物理上可以位于同一设备上也可以在不同的设备上部署不同的功能模块这样可以使用更多的计算资源来应对用户的并发访问2层与层之间应当有清晰的边界这样分层才有意义才更利于软件的开发和维护。  - 分割分割是对软件的纵向切分。我们可以将大型网站的不同功能和服务分割开形成高内聚低耦合的功能模块单元。在设计初期可以做一个粗粒度的分割将网站分割为若干个功能模块后期还可以进一步对每个模块进行细粒度的分割这样一方面有助于软件的开发和维护另一方面有助于分布式的部署提供网站的并发处理能力和功能的扩展。 - 分布式除了上面提到的内容网站的静态资源JavaScript、CSS、图片等也可以采用独立分布式部署并采用独立的域名这样可以减轻应用服务器的负载压力也使得浏览器对资源的加载更快。数据的存取也应该是分布式的传统的商业级关系型数据库产品基本上都支持分布式部署而新生的NoSQL产品几乎都是分布式的。当然网站后台的业务处理也要使用分布式技术例如查询索引的构建、数据分析等这些业务计算规模庞大可以使用Hadoop以及MapReduce分布式计算框架来处理。  - 集群集群使得有更多的服务器提供相同的服务可以更好的提供对并发的支持。 - 缓存所谓缓存就是用空间换取时间的技术将数据尽可能放在距离计算最近的位置。使用缓存是网站优化的第一定律。我们通常说的CDN、反向代理、热点数据都是对缓存技术的使用。 - 异步异步是实现软件实体之间解耦合的又一重要手段。异步架构是典型的生产者消费者模式二者之间没有直接的调用关系只要保持数据结构不变彼此功能实现可以随意变化而不互相影响这对网站的扩展非常有利。使用异步处理还可以提高系统可用性加快网站的响应速度用Ajax加载数据就是一种异步技术同时还可以起到削峰作用应对瞬时高并发。能推迟处理的都要推迟处理”是网站优化的第二定律而异步是践行网站优化第二定律的重要手段。 - 冗余各种服务器都要提供相应的冗余服务器以便在某台或某些服务器宕机时还能保证网站可以正常工作同时也提供了灾难恢复的可能性。冗余是网站高可用性的重要保证。
http://www.sadfv.cn/news/9234/

相关文章:

  • 有了域名 网站建设如何把做好的网站代码变成网页
  • 查企业网站网络教学平台
  • 太原网站建设怎么做域名网站备案
  • 描述网站开发的过程网页设计与制作属于什么专业
  • wordpress上传网站模板邯郸百度公司地址
  • 登录网站软件怎么做wordpress制作小工具
  • 外贸网站下载网站建设方案图
  • lol做视频那个网站好工作室logo设计免费生成
  • 做网站建设怎么赚钱聊城建设银行官方网站
  • 网站开发用什么系统比较好平面设计好找工作不
  • 网站建设师要求网站建设制作苏州
  • 黔西南建设厅网站服务器和网站的关系
  • 效果图网站有哪些好的做网站报价单
  • 哪个网站可以做名片深圳住房和建设局网站登录界面
  • 网络营销就是网站营销中国新闻社副总编辑级别
  • 汕头网站推广seo湖南新型网络营销方式
  • 公司网站建设需要注意哪些内容马鞍山哪里做网站
  • 京华建设科技有限公司网站广州app开发团队
  • 网站建设软件培训学校跨境电商网站排行榜
  • 长沙公司网站制作学做宝宝辅食的网站
  • 做图片视频的网站vs2008做网站教程
  • 什么网站利于优化建立公司网站
  • 手机网站的做wordpress搜索引擎主题
  • 如何安装网站程序中和seo公司
  • 简述建设iis网站的基本过程6深圳禅城网站设计
  • 广东手机网站制作公司怎样做网络推广甄选广州豪升网络
  • 企业公司网站制作建设在线数据分析网站
  • jsp做网站实例辽宁企业网站建设
  • 天天做网站广西南宁市网站制作公司
  • 企业内部网站制作psd网页模板免费下载