设计模式

C#-设计模式-适配器模式

╄→尐↘猪︶ㄣ 提交于 2020-12-20 04:47:53
1.定义 把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。 其实这个设计模式的名字,已经把他的功能说明的很清楚了,就是将不同接口的类,运用适配器,使得可以使用同一接口统一调用。 2.代码 2.1 类的适配器 public interface Runnable { void Run(); } public class Bird { public void Fly() { Console.WriteLine( " 飞翔在蓝天下 " ); } } public class BirdAdapter : Bird, Runnable { public void Run() { this .Fly(); } } 使用继承的方式,使BirdAdapter类在实现接口中可以调用基类的方法,从而实现了待适配接口和将旧的接口转换成新的接口的功能。 2.2 对象的适配器 public class BirdAdapter : Runnable { private Bird bird = new Bird(); public void Run() { bird.Fly(); } } 可以看到对象的适配器模式是使用关联关系,使BirdAdapter类中持有Bird类的对象,从而在实现接口中调用该对象的方法。这种方法比继承的方式更灵活。 3.特点 优点

灵魂一击!详解Java中的IO输入输出流

╄→гoц情女王★ 提交于 2020-12-19 18:00:14
什么是流?流表示任何有能力 产生数据的数据源对象或者是有能力接收数据的接收端对象 ,它屏蔽了实际的I/O设备中处理数据的细节。 IO流是实现输入输出的基础,它可以很方便地实现数据的输入输出操作,即读写操作。 本片要点 介绍流的定义和基本分类。 介绍文件字符流、字节流、转换流、合并流、打印流等使用。 介绍序列化的意义。 介绍两种自定义序列化方式。 基本分类 根据方向输入流 :数据从外部流向程序,例如 从文件中读取数据 。 输出流 :数据从程序流向外部,例如 向文件中写数据 。 根据形式字符流 :字符类文件,【如 txt、 java、 html】,操作16位的字符。 字节流 :【图片、视频、音频】 ,操作8位的字节。 根据功能节点流 :直接从/向数据源【如磁盘、网络】进行数据读写 处理流 :封装其他的流,来提供增强流的功能。 上面四大基本流都是 抽象类 ,都不能直接创建实例对象。 数据的来源/目的地:磁盘、网络、内存、外部设备。 发展史 java1.0版本中,I/O库中与输入有关的所有类都将继承 InputStream ,与输出有关的所有类继承 OutputStream ,用以操作二进制数据。 java1.1版本对I/O库进行了修改:在原先的库中新增了新类,如 ObjectInputStream 和 ObjectOutputStream 。增加了Reader和Writer

python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)

a 夏天 提交于 2020-12-19 07:44:46
抓包 抓包是爬虫里面经常用到的一个词,完整的应该叫做抓取 数据请求响应包 ,而Fiddler这款工具就是干这个的 普通https抓包设置 打开Fiddler ------> Options .然后打开的对话框中,选择HTTPS tab页,如图所示: 说明 (配置完后记得要重启Fiddler) 选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求 Ignore server certificate errors忽略证书错误 第一次会提示是否信任fiddler证书及安全提醒,选择yes,之后也可以在系统的证书管理中进行管理。 配置Fiddler允许远程连接 切换tab选项卡到 Connections 配置端口 选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来 等会设置手机代理时需要。设置好后重启fiddler保证设置生效。 到现在为止,其实Fiddler已经可以抓取你电脑上浏览器访问的数据了,如果不行,重启Fiddler和浏览器即可 记录本机的IP 打开cmd窗口,不会的自行百度 在里面输入 ipconfig 获取你的ip4地址 ,这个地址一定要记住,后面配置模拟器的时候是需要用的~ ip 192.168.137.1 下载模拟器

浅谈观察者模式

纵然是瞬间 提交于 2020-12-19 06:49:15
前言:到目前已经看了几个设计模式,像简单工厂模式、策略模式、单一职责原则、开放-封闭原则、依赖倒转与装饰模式等。但总是纸上得来终觉浅的感觉,没有深 刻的理解。到现在感觉是可以进一步学习面向对象语言编程的特性,如何抽象基 类、虚函数的应用、如何通过基类进行对象间的解耦、由此需要复习 C++ 虚函数、 多态等特性。 一、基本信息 1. 什么是观察者模式 观察者模式 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,会通知所有观察者,使观察者自己可以更新自己。 2 . 观察者模式特点 ( ☆ ☆☆☆☆ ) ①什么时候使用观察者模式 当一个对象改变需要同时改变其他对象的时候。 当不知道有多少具体对象需要改变时,使用观察者模式。 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。 ②观察者模式作用 主要是在解耦。让耦合的双方都依赖于抽象,而不依赖于具体(抽象耦合 ) 。从而使各自的变化不会影响到另一边的变化 ( 依赖倒转原则 ) 。并建立了一套触发机制。 个人理解,主要还是通过抽象基类进行解耦。 ③缺点 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的

C#实践设计模式原则SOLID

这一生的挚爱 提交于 2020-12-19 04:47:01
理论跟实践的关系,说远不远,说近不近。能不能把理论用到实践上,还真不好说。   通常讲到设计模式,一个最通用的原则是SOLID: S - Single Responsibility Principle,单一责任原则 O - Open Closed Principle,开闭原则 L - Liskov Substitution Principle,里氏替换原则 I - Interface Segregation Principle,接口隔离原则 D - Dependency Inversion Principle,依赖倒置原则 嗯,这就是五大原则。 后来又加入了一个:Law of Demeter,迪米特法则。于是,就变成了六大原则。   原则好理解。怎么用在实践中? 一、单一责任原则 单一责任原则,简单来说就是一个类或一个模块,只负责一种或一类职责。 看代码: public interface IUser { void AddUser () ; void RemoveUser () ; void UpdateUser () ; void Logger () ; void Message () ; } 根据原则,我们会发现,对于 IUser 来说,前三个方法: AddUser 、 RemoveUser 、 UpdateUser 是有意义的,而后两个 Logger 和 Message 作为

最新 多点Dmalljava校招面经 (含整理过的面试题大全)

梦想与她 提交于 2020-12-19 04:23:50
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿、多点Dmall等10家互联网公司的校招Offer,因为某些自身原因最终选择了多点Dmall。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了,有时间也给自己做个总结,也希望能帮助到大家 校招心得 注重实力,保持良好心态 :面试过程中,继续巩固好自己的技术栈,然后保持一个良好的心态,尤其是还没有Offer的时候,心态别崩,其实到最后大家都会找到工作的,唯一的区别就是公司的方向、规模、待遇方面,也别太在意别人拿到了牛X的Offer,尤其是牛客网,天天神仙打架,刚开始自己也是很纳闷,怎么就能这么牛,最后也都见怪不怪了~。好多之前一直没Offer的人,可能突然某一天就收获到了几份Offer,所以不断提升自己的综合能力才是关键,与其在这羡慕别人,不如让自己心态沉静下来,认真复习、厚积薄发。 多交流,多思考,刻意锻炼表达 :牛客网上有各种面经、面试经验,数不胜数,多去刷刷面经,和一起找工作的小伙伴们或者牛友们交流下面试经验、疑难问题什么的,收获也会很大的,也能放松自己紧张的身心。通过交流与思考要能总结出属于你自己的那一套正确的面试技巧

腾讯C++后台开发面试笔试知识点参考笔记

[亡魂溺海] 提交于 2020-12-19 03:12:32
文章是由我笔试面试腾讯笔记整理而来,主要是针对面试的C++后台开发岗位,涵盖了大部分C++后台开发相关可能会考察和被问到的技术点。 自认为这篇笔记是比较全面的总结,不管你是已经工作准备参加社招,还是在校学生准备参加校招,笔记都可以作为技术面试准备阶段参考查阅,查缺补漏。 笔记是基础C++知识点总结,没有过多的阐述后台开发的系统架构和分布式后台服务设计相关,还有c++11新特性,这些笔试面试也会被问到但不在这篇讨论范围,可以关注我后面有时间再补上。 阅读提示 文章约12839字,阅读时长预计33分钟。建议关注收藏方便回头查阅。 gdb调试命令 step和next的区别? 当前line有函数调用的时候,next会直接执行到下一句 ,step会进入函数. 查看内存 (gdb)p &a //打印变量地址 (gdb)x 0xbffff543 //查看内存单元内变量 0xbffff543: 0x12345678 (gdb) x /4xb 0xbffff543 //单字节查看4个内存单元变量的值 0xbffff543: 0x78 0x56 0x34 0x12 多线程调试 (gdb) info threads:查看GDB当前调试的程序的各个线程的相关信息 (gdb) thread threadno:切换当前线程到由threadno指定的线程 break filename:linenum

2020阿里,字节跳动,JAVA岗(一线企业校招、社招)面试题合集

放肆的年华 提交于 2020-12-18 21:42:42
前言 以下面试题全属于一线大厂社招以及校招的面试真题,各位在做这些题目对照自己的时候请平凡心对待,不要信心受挫。其实 做为致力于一线企业校招或者社招的你来说,能把每个知识模块的一小部分问题去深入学习和总结,已经很棒了!然后文末有我自己总结的一些答案和更多面试题的文档总结,需要可以自取! 首先展示一下以下文档包含的路线图 基础 排序实现原理和Collection实现原理 和而的区别(编译之后) 线程池的种类,区别和使用场景 分析线程池的实现原理和线程的调度过程 线程池如何调优 线程池的最大线程数目根据什么确定 动态代理的几种方式 HashMap的并发问题 了解LinkedHashMap的应用吗 反射的原理,反射创建类实例的三种方式是什么? 可克隆接口实现原理,浅拷贝或深拷贝 JavaNIO使用 哈希表和hashmap的区别及实现原理,hashmap会问到数组索引,散列碰撞怎么解决 数组列表和链接列表区别及实现原理 反射中,Class.forName和ClassLoader区别 字符串、字符串缓冲区、StringBuilder的区别? 有没有可能2个不相等的对象有相同的哈希码 简述nio的最佳实践,比如netty,Mina 树状图的实现原理 Jvm相关 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 Jvm内存分代 JAVA

中介者模式

南笙酒味 提交于 2020-12-18 19:14:27
2019年11月11日08:45:25 中介者模式(mediator pattern) 定义 从前的日色变得慢 车,马,邮件都慢 一生只够爱一个人 中介者模式(mediator pattern),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以独立地改变它们的交互。————《设计模式:可复用面向对象软件的基础》 中介者模式是一种对象行为型模式。 从木心这首小诗中的“邮件”中,讨论一下中介者模式。 很久很久以前,你和她住在一个很大很大的村子里面,你住在村的东边,她住在村的西边。 那年你才十八,她也正值青春年华,正月十五元宵节,你赏灯之时,她回首处,你一见钟情。 往后的日子里,你每天都到她家送情书。送了99天,你想这不是办法,每天大半天浪费在路上,没时间赚钱。于是你想了一个办法,创办邮局,每天替村东边的人送信件给村西边的人,一举两得。慢慢邮局越来越大,南边的人通过邮局来给北边的人送信件,你找了几个伙计,从南到北,从北到南送信。 多年后,你富甲一方,也娶了当年的她。 “邮局”就是中介者模式中的中介者,“你”和“她”就是中介者中的同事。 图示 中介者模式结构图: 角色 从中介者模式结构图中可知,有以下4个角色: (1)抽象中介者:定义了中介者 (2)具体中介者:实现了抽象中介者的方法,它需要知道所有具体同事对象,并从具体同事对象接收消息

扩招1W人,字节跳动内部公开12月份Java岗71道面试题

拜拜、爱过 提交于 2020-12-18 17:31:54
前言 近日,字节跳动官宣扩招信息,在年底前再招满 10000 人!这其中技术岗的需求占比非常高。 不少人对字节跳动技术岗的 体系结构 和 技术要求 设置不太清楚,想去面试心里没底,下面简单介绍一下字节跳动技术岗要求体系,并给大家分享一份最新入职字节跳动的同事总结出的 完整面试题! 字节跳动的 职级 研发序列一共 10 级: 不同序列间月薪base差异较大,技术base整体偏高。比如2-1月薪会在20k+,2-2的package会在60w-100w左右(算上期权,大概会占30%左右)。T2-2级别的薪资约40k,500股票/每年。 字节技术岗平均薪资情况: 字节跳动对技术岗的要求 1、3年以上开发经验; 2、精通Java,理解io、泛型、多线程、集合等Java基础使用和实现原理; 3、熟悉Spring、SpringBoot等框架,理解JVM的实现机制及性能调优; 4、掌握MySQL使用,熟悉数据库性能优化; 5、熟悉主流Key-Value存储系统,能够进行系统性能调优; 6、掌握Linux 操作系统;熟练使用一种脚本语言,Shell或Python; 7、拥有高并发、分布式系统经验优先; 8、有业务系统中台化经验者优先。 有以下经验者优先: ① 熟练掌握Golang/Python并能灵活运用; ② 具有大规模分布式系统的调优经验,如JVM调优、SQL调优、缓存优化、RPC优化等; ③