最近刚入职,每天就是看看项目源码,学学还不了解的技术,写写博客。公司的组长和员工都还不错,好在我能在这份实习中学到很多东西。
心情比较复杂,很多事情你发现纵然你改变了一些什么,当我认为我可以直面的时候,我发现还是像当年一样无力与无能...............
第一题
java代码优化遵循的原则有哪些?
1.单一职责原则
2.开闭原则
3.里氏替换原则
4.依赖倒置原则
5.接口隔离原则
6.迪米特原则
spring boot 相对 spring来说的优势有哪些?
Spring Boot是一个在Spring的基础上搭建的全新的微框架,目的是简化Spring的搭建和开发过程
Spring Boot优势 :1.对第三方插件封装和整合,提供第三方接口 2.无需配置复杂XML 3.提供安全等特性姑且不理会 4.核心功能:自动配置 5.内嵌式Web服务器 6.提供POM,简化Maven配置·
递归方程T(n) =4T(n/2)+n^2的解为()
有一个背包容量为20,先要将如下物品放入背包中,每件物品不可分,其物品的价值为{4,8,15,1,6,3},物品的重量为{5,3,2,10,4,8},求该背包的最大价值()
背包问题是一种组合游湖的NP完全问题:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高
本题为基础的01背包问题:有以下几点:
a.当物品可供选择的集合一致时,背包容量M越大,那么sum_v一定大于等于原来的值
b.背包容量M确定时,可供选择的物品N越多,那么sum_v一定大于等于原来的值
sum_v的最大值就是当M和N取到最大值时的sum_v
存在点数为1,5,7的三种牌,每种点数的牌数量不限,使用贪心算法思想,凑出10个点使得用牌数量最少,选择的策略为()
设目标字符串长度为n,模式串长度为m(m<=n),使用BF算法进行匹配时,最坏情况下的时间复杂度为()
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)。
计算机实现二进制加法过程中不会用到以下哪种逻辑
与,异或,或非,或?
java性能调优寻找瓶颈常用的命令有哪些?
jstat ,top ,jmap.jstack
有下列程序
#include<iostream>
using namespace std;
struct S1
{int a;static int b;};
struct S2
{int a; bool b; char c;}
struct S3
{float a; int b; char c;};
struct S4
{double a; float b; int c;char d;};
int main(){
cout<<sizeof(s1)<<end;
cout<<sizeof(s2)<<end;
cout<<sizeof(s3)<<end;
cout<<sizeof(s4)<<end;
return 0;
}
程序执行后输出结果是?
下列程序的运行结果是0 1 2 3 4 5 5,请将横线处缺失程序补充完整()
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int>q1;
for(int i=0;i<5;i++)
q1.push(i);
q1.push(q1.size());
qi.push(________);
while(q1.empty()!=1)
{cout<<q1.front()<<"";
q1.pop();
}
return 0;
}
选项:
q1.begin()
q1.end()
q1.back()
q1.front()
那个不是原子操作
a++;
int a=10;
int b =a;
a=a+1;
Spring框架中用到了下列哪些设计模式?
模板方法
桥接模式
前端控制模式
代理模式
常用设计模式达到九种
一:简单工厂:又叫做静态工厂方法模式,但不属于23种GOF设计模式之一。简单工厂模式的石河子是由一个工厂类根据传入的参数,动态决定应该创建哪个产品
二:工厂方法:通常应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。
三:单例模式:
当我们试图从Spring容器中取得某个类的实例时,默认情况下,Spring会才用单例模式进行创建。
如果我不想使用默认的单例模式,每次请求我都希望获得一个新的对象怎么办呢?很简单,将scope属性值设置为prototype(原型)就可以了
<bean id="date" class="java.util.Date" scope="prototype"/>
通过以上配置信息,Spring就会每次给客户端返回一个新的对象实例。
那么Spring对单例的底层实现,到底是饿汉式单例还是懒汉式单例呢?
Spring框架对单例的支持是采用单例注册表的方式进行实现的
四:适配器:在Spring的Aop中,使用的Advice(通知)来增强被代理类的功能。Spring实现这一AOP功能的原理就使用代理模式(1、JDK动态代理。2、CGLib字节码生成技术代理。)对类进行方法级别的切面增强,即,生成被代理类的代理类, 并在代理类的方法前,设置拦截器,通过执行拦截器重的内容增强了代理方法的功能,实现的面向切面编程。
五:包装器:首先想到在spring的applicationContext中配置所有的dataSource。这些dataSource可能是各种不同类型的,比如不同的数据库:Oracle、SQL Server、MySQL等,也可能是不同的数据源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。然后sessionFactory根据客户的每次请求,将dataSource属性设置成不同的数据源,以到达切换数据源的目的。
spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。
六:代理:为其他对象提供一种代理以控制对这个对象的访问。 从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。
spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。
七:观察者:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
spring中Observer模式常用的地方是listener的实现。如ApplicationListener。
八:策略:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
spring中在实例化对象的时候用到Strategy模式
九:模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Template
Method模式一般是需要继承的。这里想要探讨另一种对Template
Method的理解。spring中的JdbcTemplate,在用这个类时并不想去继承这个类,因为这个类的方法太多,但是我们还是想用到JdbcTemplate已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方法中。但是变化的东西是一段代码,而且这段代码会用到JdbcTemplate中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵JdbcTemplate中变量的方法,我们去实现这个方法,就把变化的东西集中到这里了。然后我们再传入这个回调对象到JdbcTemplate,从而完成了调用。这可能是Template
Method不需要继承的另一种实现方式吧。
apache发布个人网站时需要为主目录创建软链,使用的命令与参数是?
关于Peterson算法说法正确的是()
可以避免饥饿现象的发生
解决了临界资源互斥访问的问题
无法保证任意时刻只有一个进程处于临界区
无法法制饥饿现象发生
进程是系统调度的基本单位,它的存在是通过()唯一标识
程序
进程标识符
PCB
PID
HashMap和HashTable的区别有哪些?
IPv4协议中,IP地址用于标识地址类别的有几位?
栈初始状态为空,现输入序列为A,B,C,D,E经过push,push,pop,push,pop,push,push后,则出栈序列为()
CDEBA
ABCDE
BCEDA
BEDCA
在有序表{2,5,7,9,11,13,20,21,24,27,30,41}中使用折半查找查找元素21时,需要一次比较哪些元素?
给定矩阵int a[3][4],若a[0][0]地址为1000,按列存储时a[1][2]的地址为()
已知二叉树后序遍历序列是dcbhgfea,中序遍历序列bdcaehgf,它的前序遍历序列是?