南京科融数据面试总结

笔试:

java字符串根据特殊字符截取到数组中并输出

		String s=new String("java是一门语言,c语言是一门语言");
//		String[] strs=s.split(",");
//		for(String str:strs) {
//			System.out.println(str);
//		}
		StringTokenizer st=new StringTokenizer(s,",");
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}

注意,这些输出是不包含分隔符的

 

关于HashMap的说法哪个是错误的 

1.HashMap可以有序存放数据  //错HashMap是以散列的方式存放数据的

2.HashMap可以以null为键  //可以,但只能有一个

	Map<String,String> map=new HashMap<String,String>();
		
		map.put(null, "闫绍帅");
		System.out.println(map.get(null));

java中length,length(),size()的区别

length是数组长度属性,length()是求字符串长度函数,size()是求列表长度

String s=new String("java是一门语言,c语言是一门语言");
String[] strs=s.split(",");
System.out.println(strs.length); //2
System.out.println(strs[1].length()); //8
List <String> list=new ArrayList<>();		
System.out.println(list.size()); //0

写出

i=4;

Sysout.out.pringln(i++/5.0);

的执行过程和各个步骤的执行结果

int i=4;
System.out.println(i++/5.0);//自动类型转换的规则是将范围小的转为范围大的  -->0.8

过程i/5.0-->0.8

i=i+1=5

 

面试:

说说你这个项目的功能和实现

我们这个项目是基于微服务架构的,微服务架构主要就是把传统方式写在一个项目中的应用的功能拆分成多个功能独立的项目,利用http协议完成数据通信的功能,使项目的完整功能可以分散在各个独立的模块中

我们这个项目是世贸物业系统的一个模块,主要完成收费功能,另外还有票据管理功能,客户管理功能这两大模块,另外两个模块是由其他公司开发的,我们这边的数据更改需要同步到其他模块,我在这个项目中负责数据对接模块,另外还完成过收费项目更改模块,收费项目更改就是有些收费项可能在中途需要更改信息,那么就需要将引用更改的收费项目信息的表中数据也一同更改。
 

IDE是什么

IDEA

这个项目怎么部署

打成jar包在服务器上运行这个jar包

maven中最重要的文件是什么

pom.xml

maven中怎么导入依赖

在dependences标签中导入

怎么把项目以war包部署到Tomcat中,部署到哪个文件夹

打成war包后,放到服务器上Tomcat中的webapps文件夹里,就会自动部署

改端口在哪个文件里面改

在Tomcat的conf文件夹下的server.xml的Connector标签中改port属性

怎么在Tomcat配置文件中配置数据源

第一种,单个应用独享数据源

就一步,找到Tomcat的server.xml找到工程的Context节点,添加一个私有数据源

<Context docBase="WebApp" path="/WebApp" reloadable="true" source="org.eclipse.jst.jee.server:WebApp">  

<Resource  

    name="jdbc/mysql"   

    scope="Shareable"   

    type="javax.sql.DataSource"  

    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"  

    url="jdbc:mysql://localhost:3306/test"  

    driverClassName ="com.mysql.jdbc.Driver"  

    username="root"  

    password="root"  

/>  

</Context>  

 

第二种,配置全局JNDI数据源,应用到单个应用

分两步

第一步, 找到Tomcat的server.xml中GlobalNamingResources节点,在节点下加一个全局数据源

<Resource  

    name="jdbc/mysql"   

    scope="Shareable"   

    type="javax.sql.DataSource"  

    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"  

    url="jdbc:mysql://localhost:3306/test"  

    driverClassName ="com.mysql.jdbc.Driver"  

    username="root"  

    password="root"  

/>  

第二步,找到要应用此JNDI数据源的工程Context节点,增加对全局数据源的引用ResourceLink 

<Context docBase="WebApp" path="/WebApp" reloadable="true">  

    <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />  

</Context>  

 

第三种,配置全局JNDI数据源,应用到所有Tomcat下部署的应用

也分两步

第一步

    参考第二种的第一步

第二步,找到Tomcat的context.xml,在Context节点下加一个ResourceLink节点对第一步配置的数据源进行引用

这个XML配置文件的根节点就是<Context>

<Context>  

    <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />  

   <WatchedResource>WEB-INF/web.xml</WatchedResource>  

<Context>  

 

用过其他服务器么

用过,在Maven里面配置过jetty插件

mysql和Oracle哪个好用,为什么(mysql和Oracle的区别)

1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。

2. Oracle支持大并发,大访问量,是OLTP最好的工具。

3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。

4.Oracle也Mysql操作上的区别

①主键

Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主 
键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。

②单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

③翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用 
ROWNUM<100, 不能用ROWNUM>80

④ 长字符串的处理

长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用 
ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

⑤空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符 
进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

⑥字符串的模糊比较

MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。

⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱

SSH了解么

学过一点

简单介绍一下Strus2框架

Struts2的工作原理

                       

上图来源于Struts2官方站点,是Struts 2 的整体结构。


一个请求在Struts2框架中的处理大概分为以下几个步骤(可查看源码:https://github.com/apache/struts):
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher(现已过时)被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

 

Struts开源架构很好的实现了MVC模式,MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:

                       

Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。下面是Struts实现MVC的原理。如下图2所示:

 

控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller, ,它可以称作为Struts神经中枢。

       视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。表现逻辑和程序逻辑。

       模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。

       流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。

 

       核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。

 

 

javascript变量和java变量的区别,javascript变量要先声明再使用么

要的

话不多说,直接上例子:

1、程序的运行结果为:100  10  100

 

1 var a = 10;
2 function test(){
3     a = 100;
4     console.log(a);
5     console.log(this.a);
6     var a;
7     console.log(a);
8 }
9 test();

 

解析:Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域,所以在函数test执行前,由于第6行声明了局部变量a,所以函数内部的a都指向已经声明的局部变量,所以第4行输出100。第5行输出this.a,我们都知道,函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a,一开始生命了全局变量a=10,所以第5行输出结果为10。第7行输出结果为100,因为局部变量a在第3行已经被赋值了100,所以直接输出局部变量a的值。

2、程序的运行结果为:undefined  10

 

1 var a = 100;
2 function test(){
3     console.log(a);
4     var a = 10;
5     console.log(a);
6 }
7 test();

 

解析:看了第1个例子,可能有同学会认为输出结果是10  10,但是结果却不是10 10,为什么呢?仔细看第1个例子解析的第一句话,Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析,在这个函数中,执行第3行前,可以认为已经声明了变量a,但是并没有定义(这里即赋值),所以第3行输出结果为undefined,执行第4行a =10后,变量a的值就为10,所以第5行输出结果为10。

3、程序的运行结果为:100  10  10

 

1 var a = 100;
2 function test(){
3     console.log(a);
4     a = 10;
5     console.log(a);
6 }
7 test();
8 console.log(a);

 

解析:我们知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量,在test函数内,a=10声明了一个全局变量,所以第3行的a应该输出全局变量的值,而在函数执行之前已经声明过一个全局变量并赋值100,所以这里第上输出100。第4行给全局变量a 重新赋值10,所以全局变量a的值变成10,所以第5行输出10。而在函数test外部,第8行输出全局变量a的值,因为全局变量被重新赋值为10,所以输出结果即为10。

var声明和函数声明会被提前解析,但定义不会被提前解析

Linux chmod命令的参数详细介绍一下

chmod 权限 文件名

权限分为用户组其他,各有rwx表示读写执行

手写把一个文件"file.txt"中的字符串"中国"改成"日本","韩国"改成"朝鲜"

            File file=new File("src/file.txt");
		
		try {
			FileReader fileReader=new FileReader(file);
			FileWriter fileWriter=new FileWriter(file);

			StringBuilder builder=new StringBuilder();
			char[] c=new char[1024];
			int ch=0;
			try {
				while((ch=fileReader.read(c))!=-1) {
					builder.append(c);
				}
				System.out.println(builder);
				while(builder.indexOf("中国")!=-1) {
				builder.replace(builder.indexOf("中国"),builder.indexOf("中国")+"中国".length(),"日本");
				}
				while(builder.indexOf("韩国")!=-1) {
					builder.replace(builder.indexOf("韩国"),builder.indexOf("韩国")+"韩国".length(),"朝鲜");
					}
				
				fileWriter.write(builder.toString());
				System.out.println(builder);
				fileWriter.close();
				fileReader.close();
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				fileWriter.close();
				fileReader.close();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
	}

 

你会把文件导出为Excel么

百度一下,不难

工作中遇到问题,debug报错,扣了一天都没扣出来,你会怎么办

复制错误提示百度,在网上提问,问同事

你业余时间怎么分配

打打游戏,学学新技术,淘宝上买点新技术视频看,看不懂的再网上看别人的博客

 

总体来说这个面试官偏向与问一些基础的东西,是那种纠结代码细节问题,并且强迫自己记忆的人,不喜欢

个人还是比较喜欢先理解概念,自己手动实现,以后用到随时百度或者看以前写的代码,有的东西原理清楚了就行了,扣那么多细节干嘛

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值