数据封装

数据的封装和隐藏原则

回眸只為那壹抹淺笑 提交于 2020-01-26 00:10:00
这是我第一篇文章,总结了网上牛人的经验,以及我在实践中的思考,记录总结,以便日后回顾。 1.尽量降低耦合 1.1.原理:   Martin Fowler写到“任何 全局数据 通常都是有问题的,除非可以证明它确实没有问题”。多种原因 导致Java中的全局变量和其他类似的全局结构被认为是一种糟糕的做法。 全局数据的本质和含义违背了数据的封装和隐藏原则。 理想的情况下, 一个对象应该仅仅与那些通过构造函数或方法调用传入的对象交互 。 一个对像的实现应当对它的使用者完全隐藏实现细节。(封装隐藏) 所有使用到了这个 全局数据 的functions都会受到影响,于是所有的这些代码都要被检测、修改、重新测试, 而且,修改所有使用了这个变量的function影响到的其它地方,就这样, 一个变量值的改变影响了一个方法,又造成另一个方法的错误。在程序中,这样问题实在是可怕。 OO系统的一个基本原则是一个Object不应暴露它的实现细节,这样,当你改变了实现细节, 就可以不用改变使用了该对像的的代码部份 。所以,你应当避免getter 和 setter 函数, 因为它们主要用来访问实现细节。 1.2.实践: 尽可能地减少可变状态。特别是在并发程序中。总之,尽可能地减少可变状态。 1.2.1.减少 全局数据的使用;而对于一个对象而言,尽量减少成员变量的使用。 1.2.2.尽可能少地暴露对象自已的状态

LDA模型的封装

醉酒当歌 提交于 2020-01-24 01:06:51
最近一直在训练LDA模型,将LDA模型封装在一个脚本中,可以直接在终端传入参数进行LDA的训练和预测. 需要在同目录下准备一个stopwords(停用词典) #conding=utf-8 import codecs import os import re from os import mkdir from os . path import exists , isdir , abspath , join import gensim import jieba . posseg as pseg import yaml from gensim import corpora #1.数据处理工具 def data_util ( data , cut_flag = False , stopwords_file = './stopwords' ) : ''' 传入一条语料,对其进行处理,获取训练语料 :param data: 单行的语料 :param cut_flag: 是否分词,为True时,使用jieba进行分词处理 :param stopwords_file: 停用词文件 :return: list of words ''' stopwords_file = abspath ( stopwords_file ) if cut_flag : function_words = [ "d" ,

Hibernate封装通用数据操作基类DAO

北战南征 提交于 2020-01-19 09:47:21
package com.zhanggaosong.ssh.commdao; import java.io.Serializable; import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Order; import org.hibernate.type.DateType; import org.hibernate.type.FloatType; import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; import org.hibernate.type.Type; import org

iOS - 直播总结(理论到实践)

坚强是说给别人听的谎言 提交于 2020-01-19 01:05:59
一、直播原理及流程 1.一个完整直播app原理 直播原理 :把主播录制的视频,推送到服务器,在由服务器分发给观众观看。 直播环节 :推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞) 2.直播app实现流程 1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动 直播流程.png 3.直播app架构 直播架构.png 4.直播app技术点 二、直播基础知识介绍: 1.采集视频、音频 * 1.1 采集视频、音频编码框架 * AVFoundation :AVFoundation是用来播放和创建实时的视听媒体数据的框架,同时提供Objective-C接口来操作这些视听数据,比如编辑,旋转,重编码 * 1.2 视频、音频硬件设备 * CCD :图像传感器: 用于图像采集和处理的过程,把图像转换成电信号。 拾音器 :声音传感器: 用于声音采集和处理的过程,把声音转换成电信号。 音频采样数据 :一般都是PCM格式 视频采样数据 : 一般都是 YUV ,或 RGB 格式,采集到的原始音视频的体积是非常大的,需要经过压缩技术处理来提高传输效率 2.视频处理(美颜,水印) 视频处理原理 :因为视频最终也是通过GPU,一帧一帧渲染到屏幕上的,所以我们可以利用OpenGL

如何快速的开发一个完整的iOS直播app(原理篇)

别来无恙 提交于 2020-01-19 01:04:27
目录 【如何快速的开发一个完整的iOS直播app】(原理篇) 【如何快速的开发一个完整的iOS直播app】(播放篇) 【如何快速的开发一个完整的iOS直播app】(采集篇) 前言 大半年没写博客了,但我一直关注着互联网的动向,最近会研究很多东西,并分享,今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,整理了直播的原理,当前只是原理篇,后续会持续发布实战篇,教你从零开始搭建一个完整的iOS直播app,希望能帮助到更多的人更快的了解直播。 一、个人见解(直播难与易) 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。 直播易:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。 二、了解直播 热门直播产品 映客,斗鱼,熊猫,虎牙,花椒等等 直播效果图 1.一个完整直播app功能(来自落影loyinglin分享) 1、聊天 私聊、聊天室、点亮、推送、黑名单等; 2、礼物 普通礼物、豪华礼物、红包、排行榜、第三方充值、内购、礼物动态更新、提现等; 3、直播列表

iOS:app直播---原理篇

懵懂的女人 提交于 2020-01-19 01:03:52
【如何快速的开发一个完整的iOS直播app】(原理篇) 转载自简书@ 袁峥Seemygo : http://www.jianshu.com/p/7b2f1df74420 一、个人见解(直播难与易)   直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。   直播易:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。 二、了解直播    热门直播产品:映客、斗鱼、熊猫、虎牙、花椒等等   直播效果图         直播效果.jpeg 1.一个完整直播app功能(来自 落影loyinglin 分享) 1、聊天 私聊、聊天室、点亮、推送、黑名单等; 2、礼物 普通礼物、豪华礼物、红包、排行榜、第三方充值、内购、礼物动态更新、提现等; 3、直播列表 关注、热门、最新、分类直播用户列表等; 4、自己直播 录制、推流、解码、播放、美颜、心跳、后台切换、主播对管理员操作、管理员对用户等; 5、房间逻辑 创建房间、进入房间、退出房间、关闭房间、切换房间、房间管理员设置、房间用户列表等; 6、用户逻辑 普通登陆、第三方登陆、注册、搜索、修改个人信息

TCP、UDP、RTP(RTCP)异同与区别

独自空忆成欢 提交于 2020-01-19 01:00:30
OSI七层模型 OSI 中的层 功能 TCP/IP协议族 应 用层 文件传输,电子邮件,文件服务,虚拟终 端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化,代码转换,数据加密 没有协议 会话 层 解除或建立与别的接点的联系 没有协议 传输层 提供端对端的接口 TCP,UDP (RTP) 网 络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU 物 理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2 ************************************************************************************************************************************ TCP/IP五层模型的协议 应用层 传输层:四层交换机、也有工作在四层的路由器 网络层:路由器、三层交换机 数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层) 物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层 ****************

业务逻辑层的封装设计

巧了我就是萌 提交于 2020-01-17 09:33:57
在系统开发中,通常都会采用经典的三层或者四层架构。其中数据模型层通过ORM工具来生成模型代码,实现了数据库操作的CRUD方法,上层的业务层进行简单的封装,供界面层调用。但由于模型层是与数据库中的单个表对应,而很多数据模型之间是有关联和上下级关系的,如果仅仅对业务层做简单封装,作为传值和分层之用,则很可能在开发和维护中出现以下问题: 1. 上层界面在增加和修改数据时,需要维护数据之间的关联和上下级关系; 2.上层界面调用删除等操作时,需要处理级联删除相关数据; 3.上层界面在操作某个数据的下级菜单时,通常要重新获取,增加了数据库访问次数; 4.上层界面在根据用户选择的数据来控制操作菜单时,需要重新加载权限信息,进行复杂的权限判断; 5.通常的数据修改操作都需要记录日志,则界面层有大量的日志记录代码; 6.在进行排序和移出(移进)操作时,需要大量代码来实现。 以上问题是我在C/S结构的应用程序开发中亲身经历过的,不知是否具有普遍性。于是,希望业务层能封装上述问题相关的“附加”信息,希望达到以下效果: 1.能够在移出(移进)时能自动判断两个数据之间是否支持该操作; 2.在常用的排序中业务对象能自我排序; 3.在用户选中某个数据时,能识别出用户权限,从而控制界面菜单; 4.将日志的操作封装成统一接口,并在数据修改发生时业务层自动记录,上层操作不知道日志记录; 5

封装统一的服务端响应数据封装,状态码,枚举消息

拥有回忆 提交于 2020-01-17 04:19:58
【状态码说明】 HTTP状态码 、 HTTP在线工具 【完成源码案例】 github地址 创建响应状态码和说明枚举类 /** * 响应状态码和说明 */ public enum CodeEnum { SUCCESS(0, "成功!"), FAIL(1, "失败,未知错误!"),; /** * 响应状态码 */ private final int code; /** * 响应提示 */ private final String msg; CodeEnum(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } } 基本响应封装 /** * 基本响应封装 */ public class BaseResponse { /** * 响应码 */ private int code; /** * 响应消息 */ private String msg; protected BaseResponse() {} protected BaseResponse(CodeEnum code) { this.code = code.getCode(); this.msg = code

python 各种开源库

ぃ、小莉子 提交于 2020-01-17 00:06:05
测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链接 --推荐 mechanize- Python中有状态的程序化Web浏览。 链接 selene - 使用Python + Ajax支持+ PageObjects + Widgets进行简明UI测试 链接 hitch - 基于服务的应用程序的高级集成测试框架。 链接 Needle - Css 自动化测试框架。 链接 seleniumbase - 端到端自动化测试框架。 链接 pytest_splinter - pytest spinter和selenium集成。 链接 Browsermob Proxy - Browsermob Proxy的python包装器。 链接 Selenium-Requests - 扩展Selenium WebDriver类以包含请求库中的请求函数,同时完成所有需要的cookie和请求头处理。 链接 移动测试自动化 appium - 移动端UI自动化测试。 链接 --推荐 uiautomator- 安卓UI自动化测试。 链接 ATX - 智能手机自动化工具。支持iOS,Android,WebApp和游戏。 网易出品