设计模式

程序员面试时一定要注意这五个陷阱!你记住了吗?

[亡魂溺海] 提交于 2021-01-29 23:44:10
程序员面试时一定要注意这五个陷阱!你记住了吗? 程序员面试时一定要注意这五个陷阱!你记住了吗? 前言 很多程序员到新公司面试时没有注意到一些小问题,从而导致HR直接将自己pass掉,又或者是沦为了备用的垫底存在,那么这几个导致你被pass的小问题你是否注意过?下面请听我一一道来,希望能对大家有所启发。 一、你为什么离开上家公司? 进行社招面试时,这个问题几乎是必问的。其实这个问题主要是想试探一下求职者的核心诉求,并借此预估一下求职者将来在本公司的稳定性。常见的答案也就几种,无非就是对薪酬不满意、工作氛围不够、环境不好、干的不愉快。 但是有部分初次跳槽的求职者回答是:“在原来的公司学不到技术。” 一听到这个,那估计你其他项目准备的在充分也没用了,因为在HR面前也算是报废了,基本没戏再唱,即使你后面说的天花乱坠,HR也会觉得是敷衍。 因为在HR的经验来看,这句话基本出自一个工作时间不满两年的小白说出来的,很大概率会将你定义为一个不会学习不会感恩又特别爱抱怨的人。所以宁愿回答的普通一点,也不要天真的去追逐技术上的高端。 二、说说你最大的缺点 这个问题HR一般问到的几率也很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。但绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色。

设计模式-状态模式

独自空忆成欢 提交于 2021-01-29 04:21:45
简介 背景 :在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。 对这种有状态的对象编程,传统的解决方案是使用 if-else 等语句来做状态判断,再进行不同情况的处理。但是显然这种做法对复杂的状态判断存在天然弊端,条件判断语句会过于臃肿,可读性差,且不具备扩展性,维护难度也大。且增加新的状态时要添加新的 if-else 语句,这违背了“开闭原则”,不利于程序的扩展。 如果采用“状态模式”就能很好地得到解决以上问题。状态模式的解决思想是:当控制一个对象状态转换的条件表达式过于复杂时,把相关“判断逻辑”提取出来,用各个不同的类进行表示,系统处于哪种情况,直接使用相应的状态类对象进行处理,这样能把原来复杂的逻辑判断简单化,消除了 if-else等冗余语句,代码更有层次性,并且具备良好的扩展力。 定义 :对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 优点 :结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”;将不同的状态引入独立的对象中会使得状态转换变得更加明确

一朝读码深似海,不读源码薪难升!读懂.NET5源码,到底多重要?

被刻印的时光 ゝ 提交于 2021-01-28 15:26:21
谈到源码分析,很多人会有这样的疑问:“.NET5的基本功能我已经掌握了,还有读源码的必要吗?” 实际上,阅读源码不仅能够帮你更深刻地理解底层设计原理,提升你的系统架构能力和编码功力,还能让你知道.NET5使用中有哪些坑,提前避免。更为重要的,如果你把读源码的时间分摊到解决问题的时间成本上,你会发现,读源码反而是更节省时间的选择,因为你可以借助源码快速定位问题并制定调优方案。 除此之外,很多公司在招聘资深技术岗时,常常会要求应聘者“至少读过一种开源框架的源码”。这也就意味着,阅读源码正在从“加分项”向“必选项”转变。 读源码之初,我们的目标都是“从入门到精通”,但是,在实际阅读源码的过程中,很多人却遇到了很多棘手的问题,结果只能“从入门到放弃”。这些问题主要是: 源码有这么多,该从哪里开始读? 读源码太枯燥了,有没有什么科学有趣的方法呢? …… 1月26日~29日晚八点至十点,资深架构师Tony老师,将开启《.NET5源码解读》训练营,课程对.NET5深层设计机制以及核心源代码进行了详细剖析,让大家成为企业青睐的、真正会"造轮子"的.NET高级程序员/架构师, 课程为期3天,原价399元,本号粉丝,一律0元 加入! 长按扫码,免费入群学习 如遇扫码失败,请添加下方微信 微信号:estherzry 课程安排: DAY1:手写.NET5底层源码机制----IOC机制 1

AQS总结

你说的曾经没有我的故事 提交于 2021-01-28 09:18:24
AQS全称为AbstractQueuedSynchronizer,可以叫做队列同步器。 为线程的同步和等待等操作提供一个基础模板类。尽可能多的实现可重入锁,读写锁同步器所有需要的功能。队列同步器内部实现了线程的同步队列,独占或是共享的获取方式等,使其只需要少量的代码便可以实现目标功能。 一般来说,AQS的子类应以其他类的内部类的形式存在,然后使用代理模式调用子类和AQS本身的方法实现线程的同步。 也就是说,使用 ReentrantLock 举例,外界调用 ReentrantLock , ReentrantLock 内部定义 Sync , Sync 是AQS的子类,在 ReentrantLock 的内部实现中调用 Sync 的方法,最后完成最终的功能,当然 ReentrantLock 内部稍复杂,又加入和公平锁和非公平锁。 AQS内部有一个核心状态为 state 。所有通过AQS实现功能的类都是通过修改state的状态来操作线程的同步状态。比如在 ReentrantLock 中,一个锁中只有一个 state 状态,当 state 为0时,代表所有线程没有获取锁,当 state 为1时,代表有线程获取到了锁。通过是否能把 state 从0设置成1,当然,设置的方式是使用CAS设置,代表一个线程是否获取锁成功。 AQS提供了操作state的方法 int getState() void

程序员入职新公司,只需8步,直接凸显出个人价值

∥☆過路亽.° 提交于 2021-01-28 05:30:47
如果你初入职场,你是否对职场充满好奇与期待;如果你刚刚跳槽,你是否迫切地希望展示自己的才华!当你进入新公司之后,如何能够快速上手工作、融入团队,展现能力,凸显价值? 如果你对新职场存有困惑,以下八个方面一定会让你有所收获,使你的职业规划更加清晰,提高竞争力,更重要的是掌握职业发展的方法论。 1、如何调整心态以适应新环境; 2、初入公司如何给自己设定目标; 3、作为程序员,如何快速上手项目; 4、作为新人,如何快速了解公司的业务; 5、如何尽快了解企业文化并融入团队; 6、如何在试用期内,快速证明自己的能力; 7、如何快速体现自己的价值; 8、如何在新公司做好自己的职业规划; 一、如何调整心态以适应新环境 人们常说,心态决定一切,无论做什么事情,心态都是很重要的一个因素。虽然我们不能改变周围的环境、不能改变别人,但是我们可以调整自己的心态,改变自己。有个好的心态,遇到事情就会从容不迫,心态好,一切都会好。 我将分别从职场新人和跳槽人士两个部分来谈一谈如何调整心态以适应新的工作环境。 1、初入职场六个注意 作为一个职场新人,最重要的变化是从学校的学习生活转变进入职场的工作生活,一切都是新鲜的,步入职场就是进入了社会。其实学校也是一个社会,只不过学校里面没有那么多事情,周围的同学也比较单纯,没有那么复杂。进入职场,其实是进入社会的开始,职场里的人是竞争的关系,能者上,面对各种利益关系

AQS源码分析

感情迁移 提交于 2021-01-28 04:41:56
小弟为了进阶自己的技术。一点点挖掘自身潜力。 AQS abstractQueueSynchronizer(抽象队列同步器),是什么? 答:它是用来构建锁 或者 其他同步器组件的重量级基础框架,是整个JUC体系的基础。通过内置FIFO队列来完成获取线程取锁的排队工作,并通过一个int类型变量标识持有锁的状态; 前置知识点: 1、可重入锁(递归锁): sync(隐式锁,jvm管理)和ReentrantLock(Lock显式锁,就是手动加解)是重入锁的典型代表,为可以重复使用的锁。一个变成多个流程,可以获取同一把锁。 可重入锁概念: 是指一个线程,在外层方法获取锁的时候,再次进入该线程的内层方法会自动获取锁(必须是同一个对象),不会被阻塞。可避免死锁 举例: 递归调用同一个 sync修饰的方法或者代码块。必须是一个对象才行。一个线程调用一个对象的method1,method1 调用method2,method2调用method3, 3个方法都是被sync修饰,这样也是一个可重入锁的例子 。 再比如下面这种 static Object lock = new Object(); public void mm(){ synchronized (lock){ System.out.println("===========mm method"); synchronized (lock){

jdk动态代理模式

寵の児 提交于 2021-01-27 17:27:05
原理 在程序的执行过程中,使用jdk的反射机制,创建代理类对象,并动态的指定要代理目标类 作用 访问控制,在代理中,控制是否可以调用目标对象的方法 功能增强,可以完成在目标对象的调用是增加额外的功能 可以随时给不同的目标创建代理类 实现步骤 1 创建接口,定义目标类要完成的功能 public interface HelloService { void sayHello(); } 2 创建目标类实现接口 public class HelloImpl implements HelloService { @Override public void sayHello() { System.out.println("Hello"); } } 3 创建InvocationHandler接口的实现类,在invoke方法中完成代理类的功能 public class MyInvokerHandler implements InvocationHandler { private Object target; /** * 传入目标对象,对其创建代理对象 * @param target */ public MyInvokerHandler(Object target) { this.target = target; } /** * invoke()代理类需要完成的功能 * * @param proxy

报表生成器FastReport .Net报表页面管理介绍

本秂侑毒 提交于 2021-01-27 08:17:36
FastReport .Net是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能 报表请添加链接描述 解决方案。它可以在Microsoft Visual Studio 2005-2019中使用。支持.Net Framework 2.0-4.x,.NET Core 3.0及以上版本。 在FastReport .NET 2021.1的新版本中,我们实现了对.NET 5的支持。添加了新条形码-Deutsce Post Leitcode。将RTF转换为报告对象的算法已得到显着改进。并且还添加了用于转换数字的新功能。欢迎下载体验。(点击下方按钮下载) 立即点击下载FastReport.NET v2021.1最新版请添加链接描述 报告页面 模板由一个(大部分)或几个报告页组成。报告页,反过来,包含波段。报告对象,如文本,图片和其他被放置在band上: 报表模板可以包含多个页面。例如,您可以创建一个包含标题页和一个包含数据页的模板。创建这样的报告时,首先打印第一页,然后打印第二页,以此类推。模板的每一页都可以生成一页或几页准备好的报告-这取决于它包含的数据: 在处理子报表时也会使用报表页。与其他报表生成器相反,fastport中的子报表保存在单独的模板页中,而不是单独的文件中。 除了报表页面之外,模板还可以包含一个或多个对话表单。在创建报表之前

最全 14 张思维导图,带你构建 Java 编程思想的核心知识体系!

雨燕双飞 提交于 2021-01-27 01:46:49
点击“ 开发者技术前线 ”,选择“星标🔝” 让一部分开发者先看到未来 作者:被称为L的男人, 地址: http://www.jianshu.com/p/659f2599bde9 如何学习Java编程思想,基本分为21个部分,看完本文你就有答案。 没想到会有很多人留言要这个思维导图,一一回复有点累,放在 Github 上,方便大家下载。 文章中的截图,并没有详尽说明这个思维导图笔记,比如很多 note 是没有截图出来的(点击看高清图)。 说明 用了1个月时间,把《Java编程思想》读了一遍。然后用Mindjet Mindmanager做了读书笔记,跟大家分享一下~ 这个思维导图的读书笔记没有涵盖书中的所有知识点,但是作为框架和读书的思路比较清晰。 思维导图中有很多代码在note中,没有贴到博客中。 思维导图中没有第3章、第22章《图形化用户界面》的总结,因为这个用得很少。 预览 第1章 对象导论 第2章 一切都是对象 第4章 控制执行流程 第5章 初始化和清理 第6章 访问控制权限 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 异常 第13章 字符串 第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 Github地址:https:

最全 14 张思维导图,带你构建 Java 编程思想的核心知识体系!

独自空忆成欢 提交于 2021-01-26 23:21:47
点击“ 开发者技术前线 ”,选择“星标🔝” 让一部分开发者看到未来 作者:被称为L的男人, 授权地址: http://www.jianshu.com/p/659f2599bde9 如何学习Java编程思想,基本分为21个部分,看完本文你就有答案。 没想到会有很多人留言要这个思维导图,一一回复有点累,放在 Github 上,方便大家下载。 文章中的截图,并没有详尽说明这个思维导图笔记,比如很多 note 是没有截图出来的(点击看高清图)。 说明 用了1个月时间,把《Java编程思想》读了一遍。然后用Mindjet Mindmanager做了读书笔记,跟大家分享一下~ 这个思维导图的读书笔记没有涵盖书中的所有知识点,但是作为框架和读书的思路比较清晰。 思维导图中有很多代码在note中,没有贴到博客中。 思维导图中没有第3章、第22章《图形化用户界面》的总结,因为这个用得很少。 预览 第1章 对象导论 第2章 一切都是对象 第4章 控制执行流程 第5章 初始化和清理 第6章 访问控制权限 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 异常 第13章 字符串 第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 Github地址:https