- 1、单例模式的应用:
- 2、工厂模式解析
- 3、动态代理与静态代理
- 4、模板方法:定义一个操作中的算法骨架(父类),而将一些步骤延迟到子类中。
- 5、原型模式:简单来说就是克隆
- 6、策略模式:定义了一系列的算法 或 逻辑 或 相同意义的操作,并将每一个算法、逻辑、操作封装起来,而且使它们还可以相互替换。
- 7、观察者模式:观察者模式,他定义对象之间一种一对多的依赖关系,使得当一个对象改变状态,
- 8、redis的优点:
- 10、jdk和jre的区别:
- 11、抽象类中有没有普通方法:
- 13、实现数组与list集合的转换:
- 14、元注解:
- 15、jdk1.8新特性:
- 16、js定义变量:
- 17、sql语句怎么去重:
- 18、反射是什么:
- 19、vue是什么,有什么特点?
- 20、css是什么?
- 21、html是什么?
- 22、javascript是什么?
- 23、springmvc的优点:
- 24、什么是Spring MVC?简单介绍下你对Spring MVC的理解?
- 25、linux基础指令:
- 26、EasyUI是什么?
- 27、JQuery是什么?
- 28、extjs是什么?
- 29、bootstrap是什么?
- 30、redis怎么序列化?
- 31、控制层的常用注解?
- 32、list怎么转json格式?
- 33、json转list:
- 34、怎么用java处理文档?
- 35、依赖注入有几种方式?
- 36、spring中怎么配置redis?
- 37、七牛云:
- 39、七牛云使用:
- 40、B2B和B2C的区别?
- 41、Hashmap:
- 42、多线程的线程池怎么创建?
- 42、多线程的线程池怎么创建?
- 43、synchronized和lock的区别?
- 44、哪里用到反射机制?
- 45、反射机制的优缺点?
- 46、怎么实现动态代理?
- 47、 Java反射机制的作用
- 48、如何使用Java的反射?
1、单例模式的应用:
网站的计数器,一般也是采用单例模式实现,否则难以同步。 <br /> 应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。 <br /> 多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制 <br /> Windows的(任务管理器)就是很典型的单例模式,他不能打开俩个 <br /> windows的(回收站)也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。
2、工厂模式解析
工厂模式:工厂模式是我们最常用的实例化对象模式,利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。
分类:简单工厂、工厂方法、抽象工厂模式;
3、动态代理与静态代理
代理模式:代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,
这也和Spring的(面向切面编程)很相似 ;
分类:
静态代理:简单代理模式,是动态代理的理论基础。常见使用在代理模式
jdk动态代理:使用反射完成代理。需要有顶层接口才能使用,常见是mybatis的mapper文件是代理。
cglib动态代理:也是使用反射完成代理,可以直接代理类,使用字节码技术,不能对final类进行继承。(需要导入jar包)
4、模板方法:定义一个操作中的算法骨架(父类),而将一些步骤延迟到子类中。
实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分需要改变,这时候可以使用模板方法模式,<br /> 将容易变的部分抽象出来,供子类实现。
5、原型模式:简单来说就是克隆
6、策略模式:定义了一系列的算法 或 逻辑 或 相同意义的操作,并将每一个算法、逻辑、操作封装起来,而且使它们还可以相互替换。
我觉得主要是为了 简化 if...else 所带来的复杂和难以维护;
7、观察者模式:观察者模式,他定义对象之间一种一对多的依赖关系,使得当一个对象改变状态,
则所有依赖于它的对象都会得到通知并自动更新;
8、redis的优点:
数据存放:存放到内存中,还能不定期持久化到磁盘。存取速度快,并发能力强,断电后数据不丢失。<br /> 支持Value类型更多。<br /> 多种客户端(语言 java php c# js)<br /> 支持集群来扩展空间 8G+8G+16G<br /> 开源(免费还有很多人维护)<br /> redis一个实例能存一个key或是value大小最大是512M。
10、jdk和jre的区别:
jdk是Java开发工具包,而jre是Java的运行环境;jdk是整个Java的核心,而jre是运行Java程序所必须的环境。
11、抽象类中有没有普通方法:
有抽象方法就是抽象类,是抽象类可以没有抽象方法;
13、实现数组与list集合的转换:
array转化为List集合,通过Arrays工具类中的asList()方法;集合转化为数组,通过调用集合类中的toArray()方法即可。<br /> 注意:<br /> 如果arr 是int[] 或者是其他原始类型的数组 那么不能直接用Arrays.asList()进行转化
14、元注解:
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。<br /> 它的作用和目的就是给其他普通的注解进行解释说明的。<br /> 元注解有五个:<br /> @Retention:当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间<br /> @Documented:它的作用是能够将注解中的元素包含到 Javadoc 中去。<br /> @Target:当一个注解被 @Target 注解时,这个注解就被限定了运用的场景。<br /> @Inherited:继承的意思,@Inherited注解了B注解,B再注解别人<br /> @Repeatable:Repeatable 是可重复的意思。@Repeatable 是 Java 1.8 才加进来的,所以算是一个新的特性。
15、jdk1.8新特性:
1)Lambda表达式:lambda表达式本质上是一段匿名内部类,也可以是一段可以传递的代码<br /> 2)函数式接口:简单来说就是只定义了一个抽象方法的接口(Object类的public方法除外),函数式接口的提出是为了给Lambda表达式的使用提供更好的支持。<br /> 3)方法引用和构造器调用:若lambda体中的内容有方法已经实现了,那么可以使用“方法引用”,<br /> 也可以理解为方法引用是lambda表达式的另外一种表现形式并且其语法比lambda表达式更加简单<br /> 4)Stream API:操作步骤:创建stream、中间操作(过滤、map)、终止操作;<br /> 5)接口中可以默认方法和静态方法:在接口中可以使用default和static关键字来修饰接口中定义的普通方法<br /> 6)新时间日期API: LocalDate 、 LocalTime 、 LocalDateTime。新的日期API都是不可变的,更使用于多线程的使用环境中;
16、js定义变量:
三种方式
const——声明一个只读的命名常量。
var——声明一个变量,可同时初始化。
let——声明一个块级本地变量,可以同时初始化。
17、sql语句怎么去重:
在 MySQL 中通常是使用 distinct 或 group by子句去重;<br /> 在支持窗口函数的 sql(如Hive SQL、Oracle等等) 中还可以使用 row_number 窗口函数进行去重;
18、反射是什么:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,<br /> 对于任意一个对象,都能够调用它的任意一个方法和属性,<br /> 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。<br /> JDK 中 java.lang.Class 类,就是为了实现反射提供的核心类之一。
19、vue是什么,有什么特点?
一个轻量级的mvvm框架,支持双向绑定(v-model)和数据动态更新,是一个基于JavaScript的渐进式前端框架,<br /> 是后端mvc框架的一个延伸<br /> 和传统前端开发的关注点完全不同,传统方式关注的是都像document结构的api,而vue关注的是数据。<br /> 优点显而易见,从而屏蔽了使用复杂晦涩难记的dom结构api。
20、css是什么?
是层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言。<br /> CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
21、html是什么?
HTML是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,<br /> 使分散的Internet资源连接为一个逻辑整体。HTML命令可以说明文字,图形、动画、声音、表格、链接等。
22、javascript是什么?
JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,<br /> 而是将文本格式的字符代码发送给浏览器由浏览器解释运行。直译语言的弱点是安全性较差,<br /> 而且在JavaScript中,如果一条运行不了,那么下面的语言也无法运行。
23、springmvc的优点:
(1)可以支持各种视图技术,而不仅仅局限于JSP;
(2)与Spring框架集成(如IoC容器、AOP等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
(4) 支持各种请求资源的映射策略。
24、什么是Spring MVC?简单介绍下你对Spring MVC的理解?
Spring MVC是一个基于Java实现了MVC设计模式的轻量级Web框架,<br /> 通过把模型-视图-控制器分离,将web层进行职责解耦,简化开发,减少出错,方便组内开发人员之间的配合。
25、linux基础指令:
1)查看命令:ls<br /> 2)切换目录:cd<br /> 3)建立文件和目录:mkdir <br /> 4)拷贝文件或目录:cp<br /> 5)删除文件和目录:rm<br /> 6)重命名(用字符串替换的方式批量改变文件名):rename<br /> 7)命令后面--help:ls --help 表示寻求帮助,<br /> 8)VIM编辑模式,:wq保存退出
26、EasyUI是什么?
它是基于Jquery的一个UI插件库,封装了许多实用的控件和功能,并且是完美支持HTML5网页的框架。<br /> 提供的控件包括数据表格,树形表格,菜单,进度条,选项卡,日期组合框,调节器,对话框等等。<br /> 优点: 丰富的jQuery插件库<br /> 使用简单,可以快速开发出原型界面<br /> 支持html5,实现跨浏览器等等
27、JQuery是什么?
JQuery就是一个快速、简洁的JavaScript框架。jQuery是免费、开源的。<br /> 它可以简化查询DOM对象、制作动画、处理Ajax交互过程且兼容多浏览器的javascript库,<br /> 核心理念是write less,do more(写得更少,做得更多)。
28、extjs是什么?
ExtJS是基于JavaScript的前端框架;<br /> Ext JS基本上用于创建桌面应用程序,它支持所有现代浏览器,
29、bootstrap是什么?
Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。
30、redis怎么序列化?
spring-data- redis 默认采用的 序列化 策略有两种,一种是String的 序列化 策略,一种是JDK的 序列化 策略。
31、控制层的常用注解?
@RestController 相当于“@Controller,@Controller 和@ResponseBody”的作用,在类开头上注明,作用是返回类中所有@RequestMapping(“”) 方法 的结果。<br /> @Autowired 和@Resource 都是注入bean,区别有待研究<br /> @GetMapping(“/{id}”) 的作用是获得Get请求,相当于@RequestMapping(method = RequestMethod.GET),可用于查询记录。<br /> @PostMapping(“/add”) 的作用是获得POST请求,相当@RequestMapping(method = RequestMethod.POST)., 可用于往数据表中添加记录。<br /> Restful 风格<br /> @RequestMapping(params=”tohello”) ,此处”tohello”是参数,在浏览器中访问时要在”?”后面添加参数名。如:
32、list怎么转json格式?
使用Gson类中的toJson()方法
33、json转list:
使用Gson类中的fromJson方法
34、怎么用java处理文档?
主要用 Apache的POI工具类,网上有POI对用的API和文档
35、依赖注入有几种方式?
构造方法依赖注入、setter方法注入、接口注入
36、spring中怎么配置redis?
配置RedisConfig—>实例化Redis连接池---->编写RedisUtil进行具体的操作。
37、七牛云:
主要提供的是图片、音频、视频的云存储服务,其计费方式是按使用量计费,大大降低了一个项目的前期投入成本。
39、七牛云使用:
1)在七牛云官网注册成为用户<br /> 2)通过实名认证后会获得公钥和密钥【项目调用接口时使用】<br /> 3)在管理控制台创建储存空间【根据自己的需求选择合适的服务器】
40、B2B和B2C的区别?
以下是B2B和B2C的主要区别:. B2B服务对象是企业/商家,而B2C是消费者/个人<br /> B2B采购数量相对比较大,而B2C是个人消费。. B2B影响买家购买的因素很多,<br /> 当中包括对卖家资质考核,价格比较,货期权衡,服务态度的打量,属于理性消费;<br /> 而B2C买家,也许会货比三家,也会因为包不包邮,有没有货而考虑到底买不买,但冲动消费可能性也很大,<br /> 即毫无缘由当时喜欢了就买买买。. B2B注重用实力说话,会通过打造好的产品,提供好的服务,<br /> 竞争力的价格来赢得客户,B2C更讲究运营和营销,通过文案/包装去打动消费者。<br /> 由此B2B考验销售能力,B2C更考验运营能力。
41、Hashmap:
HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,<br /> 这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。<br /> JDK1.8之前的HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了节解决<br /> 哈希碰撞(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)而存在的(“拉链法”解决冲突)。<br /> JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(或者红黑树的边界值,默认为8)<br /> 并且当前数组的长度大于64时,此时此索引位置上的所有数据改为使用红黑树存储。
42、多线程的线程池怎么创建?
线程池的创建方式总共包含以下 7 种(其中 6 种是通过 Executors 创建的,1 种是通过 ThreadPoolExecutor 创建的);<br /> Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待;<br /> Executors.
42、多线程的线程池怎么创建?
线程池的创建方式总共包含以下 7 种(其中 6 种是通过 Executors 创建的,1 种是通过 ThreadPoolExecutor 创建的);<br /> Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待;<br /> Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程;<br /> Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序;<br /> Executors.newScheduledThreadPool:创建一个可以执行延迟任务的线程池;<br /> Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程池;<br /> Executors.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定)【JDK 1.8 添加】。<br /> ThreadPoolExecutor:最原始的创建线程池的方式,它包含了 7 个参数可供设置,后面会详细讲。
43、synchronized和lock的区别?
Synchronized和Lock比较. Synchronized是关键字,内置语言实现,Lock是接口。. <br /> Synchronized在线程发生异常时会自动释放锁,因此不会发生异常死锁。. Lock异常时不会自动释放锁,<br /> 所以需要在finally中实现释放锁。. Lock是可以中断锁,Synchronized是非中断锁,<br /> 必须等待线程执行完成释放锁。. Lock可以使用读锁提高多线程读效率。.
44、哪里用到反射机制?
JDBC中,利用反射动态加载了数据库驱动程序。<br /> Web服务器中利用反射调用了Sevlet的服务方法。<br /> Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。<br /> 很多框架都用到反射机制,注入属性,调用方法,如Spring。
45、反射机制的优缺点?
优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。<br /> 缺点:对性能有影响,这类操作总是慢于直接执行java代码。
46、怎么实现动态代理?
JDK 原生动态代理和 cglib 动态代理。<br /> JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。
47、 Java反射机制的作用
在运行时判断任意一个对象所属的类<br /> 在运行时构造任意一个类的对象<br /> 在运行时判断任意一个类所具有的成员变量和方法<br /> 在运行时调用任意一个对象的方法
48、如何使用Java的反射?
通过一个全限类名创建一个对象<br /> 获取构造器对象,通过构造器new出一个对象<br /> 通过class对象创建一个实例对象<br /> 通过class对象获得一个属性对象<br /> 通过class对象获得一个方法对象<br /> 让方法执行