Solid

复杂的POI导出Excel表格(多行表头、合并单元格)

耗尽温柔 提交于 2020-04-28 22:30:40
poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加样式,数据等。 第二种:通过excel.xls 模板的方式,自己在桌面创建一个excel, 然后修改这个excel为模板,复制到项目中(我是放在根目录下),再然后读取模板,修改模板,给模板填充数据,最后把模板写入到另外一个excel2.xls中(硬盘中的)。 按我自己的理解,这种方式只适合,需要导出的内容是固定格式的,只需要填充一次数据的 情况。比如简历。 本文内容如下: 1. 使用 HSSFWorkbook 对象 实现excel导出。一般是导出excel2003 2. 使用 XSSFWorkbook 对象实现excel导出。 一般是导出excel2007 3. 使用 SXSSFWorkbook 对象实现excel导出。 一般是导出百万级数据的excel 4. 使用 template.xls 格式模板,实现excel导出。 一般是导出有固定字段的excel ———————————————— 本文介绍 HSSFWorkbook 导出Excel多行表头、合并单元格的表格 Java代码如下: /** * 导出excel (HSSFWorkbook) */ public void

15.JavaScript实现放大镜效果

柔情痞子 提交于 2020-04-28 18:45:12
JavaScript实现放大镜效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .smallBgImg { width: 350px; height: 350px; border: 1px solid #ccc; box -sizing: border- box; background -clip: padding- box; float : left; position: relative; cursor: pointer; } .move { border: 1px solid #ccc; box -sizing: border- box; background: rgba( 165, 201, 66, 0.5 ); position: absolute; left: 0 ; top: 0 ; } .bigBgImg { width: 540px; height: 540px; border: 1px solid #ccc; box -sizing: border- box;

微信小程序学习 -flex布局

泄露秘密 提交于 2020-04-28 12:31:28
flex布局简介 微信小程序页面布局方式采用的是 Flex 布局。 Flex 布局,是W3c在2009年提出的一种新的方案,可以简便,完整,响应式的实现各种页面布局。 Flex布局提供了元素在容器中的对齐,方向以及顺序,甚至他们可以是动态的或者不确定的大小的。 样式设置为 display:flex : 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器" 容器默认有两个轴:主轴(main axis)和侧轴(cross axis)。 主轴的开始位置为主轴起点(main start),主轴的结束位置为主轴终点(main end),而主轴的长度为主轴长度(main size)。 同理侧轴的起点为侧轴起点(cross start),结束位置为侧轴终点(cross end),长度为侧轴长度(cross size)。详情见下图: flex布局的属性 1.flex-direction 主轴的方向使用 flex-direction 属性控制, 主轴 并不是一定是 从左到右 的,同理 侧轴 也不一定是 从上到下 ,它有4个可选值: row(默认值):主轴为水平方向,起点在左端。 row-reverse:主轴为水平方向,起点在右端。 column:主轴为垂直方向,起点在上沿。 column-reverse:主轴为垂直方向,起点在下沿 2.justify

【软件构造】第一章第二节 软件开发的质量属性

泄露秘密 提交于 2020-04-28 12:12:24
​ 软件构造第一章第二节 软件开发的质量属性   上一节告诉我们不同视角下“软件构造的结果”分别是什么,在这一节我们要清楚“什么样的结果”算好的。这一章我们介绍了内部、外部的若干质量属性,其中 可理解性(第四章)、可复用性(第五章)、可维护性(第六章)、健壮性(第七章)、性能(第八章)是五个关键质量目标。 Outline 软件系统的质量属性 外部与内部质量因素 重要的外部质量因素 质量因素之间的权衡 软件构建的五个关键质量目标 了解有哪些质量目标 违反有什么后果 每种质量因素需要研究的施工技术 Notes 【外部和内部质量属性】 外部质量属性是指正确性、外观、速度等影响客户的属性 内部属性是指易于理解、可读性等影响开发人员和软件自身的属性 二者关系:外部受内部制约 # 外部质量属性 【正确性】 在规格说明书描述范围之内满足正确性 保证正确性的技术 有限制的正确:只保证自己层面正确,假设调用的都是正确的 测试与调试 防御性编程 形式化编程(采用很多数学技术) 【健壮性】 碰到异常情况进行适当的响应 出现规格说明书说明之外的情况由健壮性处理 响应异常情况 给出错误提示 正常退出或降级 【可扩展性】 软件产品适应规格变化的容易程度 传统方法通过固化需求(瀑布模型)进行编程 两个基本策略 设计简洁 离散化:低耦合 【可复用性】 软件模块能否被其他程序很方便地使用 例子:开发备注、封装

OOP 思想 和 设计原则 及24种设计模式

喜夏-厌秋 提交于 2020-04-28 12:12:09
oop思想:封装、继承、多态 把组件实现和接口分开,并且让组件具有多态性 面向对象编程是一种解决软件复用的设计和编程方法,这种方法把软件中相近相似的操作逻辑和操作应用数据、状态以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。 封装: 封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或子类必须的属性和操作。 继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有菲斯有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。 多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;几十类多态特性。多态可以分成编译时多态和运行时多态。 oop 五大设计原则(SOLID原则) 外加 迪米特法则 和 组合优于继承原则(合成复用原则): 一、单一职责原则 单一职责有2个含义,一个是避免相同的职责分散到不同的类中,另一个是避免一个类承担太多职责。减少类的耦合度,提高类的复用性。 二、接口隔离原则 表明客户端不应该被强迫实现一些他们不会使用的接口,应该把胖接口中的方法分组,然后用多个接口代替它,每个接口服务于一个子模块。简单说,就是使用多个专门的接口比使用单个接口好很多。 该原则观点如下: 1

设计模式就该这么学:要走心才能遵循设计模式五大原则(第二篇)

依然范特西╮ 提交于 2020-04-28 11:26:44
摘要 :设计模式是基于一定问题解决规律产生,自然也会有些公用的东西,这个公用的东西就是我今天要讲的设计模式的五大原则,当然原则只是战略层面的指导,没有代码能完全遵守着五大原则,要根据实际(zou)情况(xin)合理取舍   本文作为《设计模式就该这么学》系列文章的第二篇,今天我们来聊一下设计模式中的五大原则!   《设计模式就该这么学》 系列 文章: 设计模式就该这么学:为什么要学设计模式?(开篇漫谈) 设计模式就该这么学:要走心才能遵循设计模式五大原则(第二篇) 设计模式就该这么学:以微信订阅号来讲观察者模式(第三篇) 观察者模式实际应用:监听线程,意外退出线程后自动重启 一、到底是哪五大原则   设计模式(面向对象)五大原则可以简称为SOLID,SOLID是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写,它目的就是为了写出 可复用、可扩展、高内聚、低耦合 的代码。 当然原则只是战略层面的指导,没有代码能完全遵守着五大原则,要根据实际(zou)情况(xin)合理取舍。 下面我们来看看SOLID的具体描述: SRP The Single Responsibility Principle 单一责任原则 OCP The Open Closed Principle 开放封闭原则 LSP The Liskov

SOLID原则(OOD&OOP)

一世执手 提交于 2020-04-28 11:26:06
SOLID原则是面向对象编程和面向对象设计的头五大原则。学习及应用这五大原则可以构建一个易于维护和扩展的应用程序,我们一起看看到底是那五大原则。 S--单一责任原则(SRP) --Single Responsibility Principle O--开放封闭原则(OCP)-- Open-Closed Principle L--里式替换原则(LSP)-- Liskov Substitution Principle I –- 接口分离原则(ISP)--Interface Segregation Principle D–-依赖倒置原则(DIP)-- Dependency Inversion Principle 一、 单一责任原则(SRP) 单一责任原则指出当需要修改某个类的时候原因有且只有一个。也就是说一个类应该只负责一件事情。 当这个类需要去做其他的事情的时候,就需要分解这个类。如果把多个功能放在一个类中要它负责, 那么各个功能之间会形成关联,改变其中一个功能可能会牵连其他的功能的改变,这样有需要花费时间和人力对其他功能的改变进行测试,保证其他功能的完整。 Ex: 一个有关长方形的类,长、宽、面积。后来需要增加正方形,就继续使用长方形的类,使用的时候长=宽。这一种情况违背了SRP原则,一个类只负责一件事情,这个时候应该新建一个正方形的类。 二、 开放封闭原则(OCP)

架构设计的五大原则-SOLID

两盒软妹~` 提交于 2020-04-28 10:37:14
1.背景 最近在读《架构整洁之道》这一本书,这本书的确写得不错,最近也没有更新文章,一方面再忙工作,另一方面也再啃一些书。当然文章还是得更新,《架构整洁之道》里面有些有意思的内容我会提取出来外加自己的思考。在这本书里面的第三章介绍了设计原则,这部分我觉得对于大家的平时工作都比较有用。 2. 设计原则 想必大家在学习面向对象的时候,都学习过下面几大原则: SRP 单一职责:该设计原则是基于康威定律的推论,每个软件模块有且只有一个被更改的理由。 OCP 开闭原则:对扩展开放,对修改关闭。 LSP 里氏替换原则:任何基类可以出现的地方,子类一定可以出现。 ISP 接口隔离原则:在设计中需要避免不需要的依赖。 DIP 依赖反转原则:高层策略性代码不应该依赖底层细节的代码,而应该是底层细节代码依赖高层策略。 这五个原则也被称为,SOLID原则取的是他们的首字母。这个也是我们做一个好设计的基础,接下来会依次对其进行解释。 3.SRP:单一职责 SRP很容易被大家从字面意思无界,并不是每个模块只做一个事,而是每个模块的变化原因只有一个。在书中对于SRP最后的解释是: 任何一个软件模块都应该只对某一类行为者(有共同需求的人)负责。 这里的软件模块指的就是一个源代码文件或者一组紧密相关的函数和数据结构。SRP原则应该是大家运用得最多的原则之一。在书中举了一个例子

QTabWidget TabBar 右侧背景色设置和QTabWidget 样式设置

北城以北 提交于 2020-04-28 06:57:10
1.问题:QTabWiget的头部背景色通过设置background-color属性没有生效,网上找了很多方法,也不生效。 2.解决办法:在Qt Designer中将autoFillBackground复选框勾选,设置背景色,就会自动填充颜色。 background-color:#FFFFFF 3.QTabWidget 样式设置 (1)QTabWidget显示区域的属性设置 QTabWidget::pane { border-top: 1px solid #E5E5E5; border-left:1px solid #E5E5E5; position: absolute; font-size: 14px; background-color:#FFFFFF; } (2)QTabWidget 选择项的属性设置 QTabBar::tab { border: none; border-bottom-color: #FFFFFF; /* same as the pane color */ border-top-left-radius: 4px; border-top-right-radius: 4px; min-width: 8ex; padding: 2px; font-size: 14px; background-color:#FFFFFF; } QTabBar::tab

Web开发相关笔记 #04# WebSocket

。_饼干妹妹 提交于 2020-04-28 05:29:04
本文的主要内容: HTTP VS. WebSocket WebSocket 的客户端实现(JavaScript) WebSocket 的服务端实现(Java & apache WebSocketAPI) WebSocket 深入学习 HTTP VS. WebSocket 简单来讲, WebSocket 就是一种允许服务端主动向客户端 PUSH 数据的技术。 传统的 HTTP 只能是客户端先主动向服务器发起请求然后获得服务器响应。 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。 当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。 上面是 网络上 对于 websocket 的一段简短介绍。 值得一提的是,有不少人认为 websocket (于2011年被IETF定为标准RFC 6455)是一项可以取代 AJAX (约 1998 年前后得到应用)的技术。