Intellij idea快捷键

Intellij idea快捷键

自动代码 常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplate样板代码 。 例如要输入for(User user : users)只需输入user.for+Tab ; 再比如,要输入Date birthday = user.getBirthday()只需输入user.getBirthday().var+Tab即可。 代码标签输入完成后,按Tab,生成代码。 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) 或者右键(Generate) fori/sout/psvm + Tab Ctrl+Alt+T 生成try catch 或者 Alt+enter CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里 Ctrl + O 重写方法 Ctrl + I 实现方法 Ctr+shift+U 大小写转化 ALT+回车 导入包,自动修正 ALT+/ 代码提示 CTRL+J 自动代码

简析 @Component @Autowired @Resource @Named等等的用法

简析 @Component @Autowired @Resource @Named等等的用法

之前是了解了@Controller注解的用法, 通过让Bean定义注解工作起来 (1)关于@Component @Component是所有受Spring管理组件的通用形式,不好区别时用这个。 Spring还提供了更加细化的注解形式: @Repository、 @Service、@Controller, 它们分别对应存储层Bean,业务层Bean,和展示层Bean。 (2)关于@Autowired的用法 ,注入bean 写在applicationContext.xml里面   Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析, 所以要让 @Autowired 起作用必须事先在 Spring 容器中声明。                     (3)有关于@Resource 这两者貌似差不多,不同在于 @Autowired默认按

面向接口编程

面向接口编程

我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理想的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点麻烦。 什么叫面向接口编程 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。 1.关于接口的理解。接口从更深层次的理解,应是定义(规范,约束)与实现(

Dubbo框架使用demo

Dubbo框架使用demo

Dubbo调用关系说明 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者在启动时,向注册中心订阅自己所需的服务。 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。 1、安装zookeeper zookeeper下载下来后修改conf文件里的文件名称,有可能会报找不到JAVA_HOME的错误,可以参考该文章,修改 zkEvn  中的Java安装路径

用抽象类来实现接口的意义

用抽象类来实现接口的意义

抽象类和接口都是java中用来实现多态的方法,在此主要说明为什么会用抽象类来实现接口,因此对两者之间的异同就不介绍了。 在java一般的用法中,如果要用普通类来实现接口,则必须实现该接口中的所有方法,这样就会导致需要实现多余的方法; 采用抽象类来实现方法,可以实现该接口中的部分方法,而且当其他类继承该抽象类时,只需要实现抽象类中未实现的方法即可。 例:抽象类B只实现了接口A中的方法a、b, 当类C继承类B时,只需要实现B中未实现的接口c即可。 一般情况下,类C中的方法a、b都是调用父类B的方法a、b。 另外:接口种没有构造方法,抽象类可以有构造方法。 Java抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过

数据结构与算法之美08

数据结构与算法之美08

一、什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构。2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据。二、为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。2.但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险。3.所以,当某个数据集合只涉及在某端插入和删除数据,且满足后进者先出,先进者后出的操作特性时,我们应该首选栈这种数据结构。三、如何实现栈?1.栈的APIpublic class Stack<Item> {//压栈public void push(Item item){}//弹栈public Item pop(){}//是否为空pu

数据结构与算法之美07

数据结构与算法之美07

链表(下):如何轻松写出正确的链表代码? 一、理解指针或引用的含义1.含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用)。2.示例:p—>next = q; 表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next; 表示p节点的后继指针存储了p节点的下下个节点的内存地址。 二、警惕指针丢失和内存泄漏(单链表)1.插入节点在节点a和节点b之间插入节点x,b是a的下一节点,,p指针指向节点a,则造成指针丢失和内存泄漏的代码:p—>next = x;x—>next = p—>next; 显然这会导致x节点的后继指针指向自身。正确的写法是2句代码交换顺序,即:x—>next =

评判代码优劣的标准

评判代码优劣的标准

默认6分代码风格有问题扣1分代码有明显的设计问题,耦合严重扣1分逻辑有明显功能或性能问题扣1-2分没有单元测试扣1分通过各种模式解耦和提高扩展性加1分优化高并发下的性能问题加1分代码本身有一定技术挑战加1分引入或者实现新框架解决通用问题加1分 每个人自行选择过去半年里自己认为写的最好的代码,向我介绍他写的代码好在哪里。 转自 蛋疼的axb 的微博

约瑟夫环问题

约瑟夫环问题

约瑟夫环问题,这是一个很经典算法,处理的关键是:伪链表 问题描述:N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。

数据结构与算法之美06

数据结构与算法之美06

链表(上):如何实现LRU缓存淘汰算法? 一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。 二、为什么使用链表?即链表的特点1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n)级别(需要从链头至链尾进行遍历)。2.和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。 三、常用链表:单链表、循环链表和双向链表1.单链表1)每个节点只包含一个