设计模式

架构设计与架构思维

佐手、 提交于 2020-12-16 11:08:21
前言 会打狗棒法的不一定是丐帮帮主,比如杨过。 不会打狗棒法的不一定就不能当丐帮帮主,比如乔峰。 架构设计不一定要有一个架构师的头衔,有架构师头衔的人不一定就懂架构,或者有机会真正参与架构设计。对于程序员来说,即使没有架构师的 title,我们也可以练好架构的功夫,只要武功高强,一样潇洒地行走江湖。接下来,聊一聊架构的一些东西 一、好的架构师有什么特点 技术好。至少代码容易读,容易扩展,重用性好,这不仅需要学习面向对象和设计模式,还要通过大量的编码实践,不单单是停在纸上谈兵的阶段 懂得业务。不了解业务,就不能设计出贴合业务的架构,而行业的相关知识也不是短时间能积累起来的。良好的沟通能力。架构师需要沟通确认需求,需要让团队理解架构设计。有架构思维。懂得用抽象、分治、复用、 迭代等思维降低软件复杂性 二、什么是架构思维 降低软件复杂性,有几种有效的方式:抽象、分治、复用和迭代,架构思维就是这几个的集合 1. 抽象思维 架构是为了满足业务需求而存在,需要通常是一些文字性的描述、原型、UI 设计图,这些最终都会变成代码让机器执行。我们必须先进行抽象,把需求变成计算机能识别的模型。例如,抽象出各个用户、订单、内容等模型,划清各个角色的责任以及对象交互的方式,隐藏很多无关紧要的细节。 2. 分治思维 对复杂的系统分而治之,分解为小的、简单的部分。例如针对高并发场景

期待已久的beego2.0来了,最简单易用的企业级应用开发框架

元气小坏坏 提交于 2020-12-16 11:01:47
Beego 2.0 初心 模块化与解耦 AOP 初次尝试 更好的可观测性 tracing 和 metrics logging 防呆设计 ORM 姗姗来迟的配置模块优化 adapter 模块和升级指南 未来 Beego 2.0 初心 在鸽子精的本性屡次发作之后,我们终于官宣Beego v2.0要和大家见面了。 在得知我们开启了 Beego 2.0 的时候,很多人问我们,你们搞 2.0 干啥呀? 其实不论是 Beego 1.x 还是 Beego 2.0,我们的初心一直没有改变,也就是希望能够为 Go 企业级应用开发 提供一种 一站式的解决方案 ,尤其是我们希望能够为中小型企业赋能,帮助这些企业提升研发效率、工程质量,以快速推出新产品,快速完成迭代。 我们很多大型企业都有很多规范,但是我们中小企业在规范和基础组件上面经常是很混乱,开发早期都是怎么快怎么来,但是当有新同学加入或者有一个同学离职,就会导致 相同功能 不同的写法 、 引入同一功能的不同组件(例如日志引入 logrus、zap ), 最终会导致 维护困难 、 重构难 ,遇到问题不知道怎么查找问题点,这些都是我们很多企业遇到的困难。 而站在我们打工人的角度,我们也相信,真正的劳动者,不应该是被禁锢在流水线上的囚犯。技术应当解放生产力,将劳动者者从繁琐枯燥的重复性劳动中解放出来,去从事具有创造性艺术性的活动。 所以,我们的设计目标

022-抽象类与抽象方法

倾然丶 夕夏残阳落幕 提交于 2020-12-16 10:37:19
声明:我的所有文章,都是对网上教学视频的整理,包括狂神说、尚硅谷、黑马程序员等等,用来作为参考资料,无任何商业使用,请广大网友参考,不喜勿喷,谢谢。(注意,由于网站的原因,有些代码字符可能会出现问题,建议大家阅读代码时,最好和下面的图片对应来看) 一、抽象类的引入 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。 二、抽象类与抽象方法的定义 1、用abstract关键字来修饰一个类,这个类叫做抽象类 2、用abstract来修饰一个方法,该方法叫做抽象方法,该方法只有方法的声明,没有方法的实现,以分号结束,如:public abstract void talk(); 3、含有抽象方法的类必须被声明为抽象类 4、抽象类不能被实例化,抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体;若没有重写全部的抽象方法,仍为抽象类。 5、不能用abstract修饰变量、代码块、构造器 6、不能用abstract修饰私有方法、静态方法、final的方法、final的类 三、示例 四、抽象类应用 抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。 例如:在一个航运公司系统中

怎么做数据可视化大屏?从设计到上线,一般用这3类工具

狂风中的少年 提交于 2020-12-16 04:27:26
数据可视化大屏成为了这两年很火爆的一个需求。 一方面,不少甲方都想做这么酷炫的大屏,用于公司展厅、日常经营监控,还有些特殊行业如交通、运输、工厂制造,会做更高级的3D建模等。 另一方面,市面上可提供做大屏的技术、工具和厂商层出不穷,似乎能和数据搭上边的都能做大屏。 大屏真的像一些文章说的神乎其技吗,真的那么低门槛零成本? 如果是这样,我作为一个做技术,尤其是做了十几个大屏项目实施,也不会秃头了...... 先来说说几个误区。 误区一:网上看到的绝大部分大屏都是效果图 效果图和实际图最大的区别就是效果图都是静态的,实际实施时需要适配屏幕分辨率,比如字体能否自适应大小。一些动态展示如3D旋转以及图表空间和数据刷新的速率也无法看见,基本上实际图做出来会和效果图差那么一两成。 再者啊,这个效果图很多在线网站,图表插件都可以直接设计出,像我们在做项目前也需要美工帮出几版效果图,所以你无法通过效果图来判别厂商的专业度尤其是实施能力。 误区二:认为大屏仅是前端技术?NO! 数据从哪里来,是读业务数据库还是建立中间库,数据更新的频率要求是什么,数据质量有无问题还要先做底层数据处理? 硬件方面,需要明确大屏的尺寸、种类、驱动大屏的主机? 业务方面,大屏展示什么指标和维度,业务分析逻辑谁来支撑? 这些都是要考虑的。 误区三:大屏成本低,零代码实现?NO! 据我所知,一个大屏项目十几万是常有的事

浅谈几种设计模式

回眸只為那壹抹淺笑 提交于 2020-12-15 17:15:29
设计模式分类 总体来说设计模式分为三大类: 创建型模式: 单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式: 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式: 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式思维导图 单例模式 单例模式的八种写法 1、饿汉式(静态常量)[可用] 2、饿汉式(静态代码块)[可用] 3、懒汉式(线程不安全)[不可用] 4、懒汉式(线程安全,同步方法)[不推荐用] 5、懒汉式(线程安全,同步代码块)[不可用] 6、双重检查[推荐用] 7、静态内部类[推荐用] 8、枚举[推荐用] 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 工厂方法模式 public abstract class AbstractDriverFactory { public abstract Animal

浅谈几种设计模式--模板模式

落花浮王杯 提交于 2020-12-15 11:56:35
概述 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 类结构图 解决问题 模板方法就是提供一个算法框架,框架里面的步骤有些是父类已经定好的,有些需要子类自己实现。相当于要去办一件事情,行动的流程已经定好了,但有些步骤需要自己去做,而有些步骤可能别人帮我们做了。 就拿建网站来说,一般的程序是购买域名-->购买空间-->上传网站-->备案-->审核,每个网站的创建必须经过这样的固定程序,但除了审核不用建站者关心,其他的步骤都要建站者自己去完成。 应用实例 现在我们很多家庭都有了豆浆机,豆浆的营养价值不用我多说了。 制作豆浆的程序简单点来说就是 选材--->添加配料--->浸泡--->放到豆浆机打碎,通过添加不同的配料,可以制作出不同口味的豆浆,但是选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的。 代码 //豆浆类,抽象类 public abstract class SoyaMilk { //这是模板方法,用final修饰,不允许子类覆盖。模板方法定义了制作豆浆的程序 final void prepareRecipe(){ selectMaterial(); addCondiments(); soak(); beat(); } //选材方法,选择黄豆 void

网易游戏部门Java架构师必看的“完美版”Netty源码笔记

北慕城南 提交于 2020-12-14 18:00:18
这份网易内部的Netty源码笔记是以实战为导向,深入解读Netty底层核心源码及架构设计。同时这份笔记还包含2个高级应用项目,分别为分布式RPC与架构产生高并发后10亿级任务调度和监控引擎。可以说这是一份比较高端的笔记,需要读者有十分扎实的Java开发的基本功!话不多说直接进入正题! 这份笔记章节不多,但是涵盖了网易游戏数十年的经验积累,而且页数高达1315页!全部展示出来不仅现实,所以只能为大家展示部分内容,完整版的免费获取方式: 需要这份资料的,点击这里即可查看获取方式 第1章Netty基础篇 第2章原理部分 多路复用器 Netty线程模型 编码和解码 序列化 零拷贝 背压 第3章分布式RPC Netty整合Spring 采用Netty实现一套RPC框架 分布式RPC的构建 第4章Netty核心组件源码剖析 NioEventLoopGroup源码剖析 NioEventLoop源码剖析 Channe|源码剖析 Netty缓冲区ByteBuf源码剖析 Netty内存泄漏检测机制源码剖析 第5章Netty读/写请求源码剖析 ServerBootstrap启动过程剖析 Netty对I/O就绪事件的处理 第6章Netty内存管理 Netty内存管理策略介绍 PoolChunk内存分配 PoolSubpage内存分配与释放 PoolArena内存管理

为了忽悠大厂面试官,熬夜总结了这些Spring面试题!

这一生的挚爱 提交于 2020-12-14 13:04:22
1.说说Spring 里用到了哪些设计模式? 单例模式 :Spring 中的 Bean 默认情况下都是单例的。无需多说。 工厂模式 :工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。 代理模式 :最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。 模板方法模式 :主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关闭连接几个过程,非常适用于模板方法。 2.谈谈你对IOC 和 AOP 的理解?他们的实现原理是什么? IOC 叫做控制反转,指的是通过Spring来管理对象的创建、配置和生命周期,这样相当于把控制权交给了Spring,不需要人工来管理对象之间复杂的依赖关系,这样做的好处就是解耦。在Spring里面,主要提供了 BeanFactory 和 ApplicationContext 两种 IOC 容器,通过他们来实现对 Bean 的管理。 AOP 叫做面向切面编程,他是一个编程范式,目的就是提高代码的模块性。Srping AOP 基于动态代理的方式实现,如果是实现了接口的话就会使用 JDK 动态代理,反之则使用 CGLIB 代理,Spring中 AOP 的应用主要体现在 事务、日志

想进BAT一线互联网大厂,该怎么准备技术面试?一位6年老Android的面经总结(附300+面试题)

倖福魔咒の 提交于 2020-12-14 10:09:31
前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司。谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿意的就自己找工作,给了一个多月的时间找工作,就没有赔偿了,反正公司也没钱。悲哀…. 幸好提前准备过,不过都是断断续续的今天看点这个,明天看点那个,三天打鱼两天晒网的,也没用心去准备。这下好了,直接到了最差的地步了,没办法,用心准备吧。 简历内容 基本信息 姓名,联系方式,工作年限,学校,专业,学历 个人技能 工作几年 独立开发 掌握的技能,组件化、插件化、热修复、自定义view 适配、架构、第三方源码、性能优化 职业技能:管理能力、产品能力、沟通能力 这些东西一定要写自己熟悉的,最好项目里面能体现出来的内容 项目经验 项目描述: 一句话 工作内容:做了哪些模块,用了什么技术、做过哪些优化,重构方面的内容 项目方面写两到三个项目,最好最近一两家公司做的项目 公司经历 公司名称 时间 工作内容 面试题准备 项目中用到的技术 整理出来,上网找找相关的技术文章和面试题看看,然后用自己的话把这些内容梳理出来,最好有自己的看到,面试官习惯问为什么。 Android知识点 基础: 四大组件、fragment、自定义View、事件分发、滑动处理、handler、AsyncTask

四年,上海,车房妹

試著忘記壹切 提交于 2020-12-14 08:18:41
B 哥是我的导师,记得我刚进入腾讯实习的那天,是他出来接我。当时我有点怀疑,不会吧,不会吧,我的导师这么年轻?和我想象中的经验丰富的程序员的样子简直天壤之别。 后来确认了,他就是我的导师,怎么会这么年轻呢?惊讶之余,我也在期待他有没有什么过人之处,可以带我学习带我飞。 直到现在认识 B 哥已经一年多了。老实说,刚开始我还并没有觉得他特别厉害,但是随着和他在工作中的合作交流,渐渐地加深了对他的了解,我才越来越发现,这个人是真的强啊! 有多强呢? B 哥本科毕业后直接工作,经历了四年的打拼,如今的他已经是腾讯的高级软件开发工程师和技术 owner,在上海有好车、买得起市区房,前段时间还和漂亮妹子领了结婚证,真是典型的人生赢家啊!关键还很帅,发量足,你说酸人不? 那么 B 哥是怎么做到年轻有为、有事业、有车房妹的呢? 曾经 B 哥也和我讲过他的成长经历,但是今天我要分享的不是他的奋斗史,而是想和大家聊一聊,我作为他的徒弟,和他发生了那么多故事,从他的身上看到了哪些 优秀的技术人应该具有的特质 ,也是我认为 B 哥牛逼的原因。 技术控 很多优秀的程序员应该都有对技术的追求,或是见多识广,或是深入研究,而且非常乐于将他们懂的技术分享给更多人。 B 哥就是这样一位技术控,他刚毕业的时候,就通读了很多知名框架的源码,并且能够将他们清晰地讲出来。记得我刚进腾讯的时候,听的第一场技术分享就是 B