浦发银行面试 机试题 2020

浦发银行面试 机试:

1.Java常用的注解
	   1)、声明Bean注解
	        @Conponent组件:没有明确角色
	        @Service:在业务逻辑层使用(service层)
	        @Repository:数据库访问层(dao层)
	        @Controller:表现层,控制器
	    2)、注入Bean的注解
	        @Autowired:Spring提供
	        @Inject:JSR-330提供
	        @Resource:JSR-250
	    3)、配置类注解 
	        @Configuration:当前类为配置类
	        @Bean:声明当前方法返回值为一个bean
	    4)、切面相关
	        @Aspect:声明一个切面
	        @After:方法执行之后执行
	        @Before:方法执行之前执行
	        @Around:方法执行前后都执行
	        @PointCut:声明切点
	    5)、值注入    
	        @Value:属性注入值
	    6)、SpringMVC
	        @RequestMapper:映射web请求
	        @ResponseBody:支持返回值放在response内,返回json数据(异步请求)
	        @RequestParam:参数获取
参考:
https://www.cnblogs.com/dz11/p/10396495.html
https://blog.csdn.net/sha1024/article/details/82791098#spring_MVC_254

2.ssm如何整合MySQL
spring-context.xml中配置数据源:
<!-- 加载外部属性配置文件 -->
    <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:config/jdbc.properties" />
    </bean>
<!-- 配置C3P0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
在pom.xml 中配置数据库依赖mysql、mybatis
参考地址:https://blog.csdn.net/qq_32678363/article/details/81056831

3.maven的文件拉取
修改中央仓库:setting.xml
<localRepository ></> // 配置本地仓库
<mirror>
    <id><mirrorOf><name><url> # 远程仓库配置的地址
</mirror>

4.ssm与spring boot的区别
作用:SSM(spring-springMVC-mybatis),减轻开发部署压力;springBoot:内置了Tomcat框架,抛弃xml文件,使用注解开发,减轻开发以及运行环境部署的负担;
打包:由于内置tomcat,SpringBoot项目打包部署后可以直接启动
构建:Spring、springMVC、mybatis分别进行配置,SpringBoot配置application.properties,主要是数据库相关的;

5.string与stringbuffer区别
答:String对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值;
        StringBuffer对象实例化后,只对这一个对象操作;
        
6.Linux命令(创建目录)
1、cd cd /opt:切换到目录opt
2、ls 查看文件与目录 ls -al 查看文件(含隐藏文件)
3、grep 文本搜索
4、find 查找
5、mkdir 创建指定名称的目录 mkdir newfolder
6、cp 复制文件
7、mv 移动文件、目录或修改名称
8、rm 删除文件和目录 
9、ps 列出系统中当前运行的进程 ps -ef|grep tomcat 查看所有有关tomcat的进程
10、kill 终止指定的进程 kill -9 19979 终止进程号为19979的进程
11、tar 文件打包
12、chmod:改变文件的权限
13、tail 查阅正在改变的日志文件
14、pid 查看进程
15、pwd 显示当前工作目录
16、vi 启动vi编辑器 vim 编辑
17、date 输出当前时间
18、top 查看cpu占用情况
19、free 查看内存占用情况
20、su 切换用户 su -username
7.mybatis中SQL语句书写
parameterType:1、基本类型;2、POJO对象;3、HashMap
resultType:1、基本类型;2、POJO对象;3、resultMap:自定义字段
增:
<insert id="saveUserRoleRelationship">
      <foreach collection="data.ids" item="roleid" separator=";">
          insert into t_user_role(userid,roleid) values (#{userid},#{roleid})
      </foreach>
</insert>
删:
<delete id="deleteUserRoleRelationship">
       delete from t_user_role where userid=#{userid} and roleid in
      <foreach collection="data.ids" item="roleid" open="(" separator="," close=")">
          #{roleid}    
      </foreach>
  </delete>
改:
<update id="updateByPrimaryKey" parameterType="com.bj.crowdfunding.bean.Role">
    update t_role
    set name = #{name,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>
查:
<select id="queryCount" resultType="int">
    select count(*) from t_role
    <where>
          <if test="queryText!=null">
                name like concat('%',#{queryText},'%')
            </if>
        </where>
</select>

8.html中静态资源和MVC中静态资源的访问
html中:静态资源通过js,css,image等形式引入,根据引入的不同,分别使用不同的标签;
MVC中:默认的访问URL都会被DispatcherServlet所拦截,如何直接访问静态资源?在web.xml 中进行配置:
springmvc-context.xml中进行映射(配合RequestMapper等标签实现路径的映射):
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
</bean>
单纯资源定义:
<resources mapping="/images/**" location="/images">
资源路径:【自定义监听器,将项目路径保存】

public class StartSystemListener implements ServletContextListener {
    //在服务器启动时,创建application对象时需要执行的方法.
    public void contextInitialized(ServletContextEvent sce) {
        //1.将项目上下文路径(request.getContextPath())放置到application域中.
        ServletContext application = sce.getServletContext();
        String contextPath = application.getContextPath();
        application.setAttribute("APP_PATH", contextPath);
       
    }
    public void contextDestroyed(ServletContextEvent sce) {
    }
}
资源的引用为:
<link rel="stylesheet" href="${APP_PATH }/bootstrap/css/bootstrap.min.css">
9.为什么选择浦发银行?
答案:我花费了很长时间考虑各种职业的可能性,我认为这方面的工作最适合我,原因是这项工作要求的许多技能都是我擅长的;
举例来说:分析问题和解决问题时我的强项;
【公司层面】:【大公司】有竞争力,平台;【小公司】:公司特点
【自己适合公司】:企业文化、职位和专业的匹配度
笔试:

1.最长连续不重复序列长度
输入:abcabcbb
输出:3
package com.bj.pufa;
/**
* 1、无重复字符的最长子串
输入:abcabcbb
输出:3
*/
import java.util.HashSet;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        int res = maxSubString(str);
        System.out.println(res);
        scan.close();
    }
    // 【有问题】:无法处理"dvdf"
    private static int maxSubString(String str) {
        HashSet<Character> set = new HashSet<>();
        int maxLen = Integer.MIN_VALUE;
        for (int i = 0; i < str.length(); i++) {
            if(set.contains(str.charAt(i))){
                maxLen = Math.max(maxLen, set.size());
                set.clear();
                set.add(str.charAt(i)); // 将当前元素加入
            }else {
                set.add(str.charAt(i));
            }
        }
        return set.size()>maxLen?set.size():maxLen;
    }
    // 两层循环+Hashset
    private static int maxSubString1(String str) {
        int max = 0;
        for (int i = 0; i < str.length(); i++) {
            HashSet<Character> set = new HashSet<>();
            for (int j = i; j < str.length(); j++) {
                if(set.contains(str.charAt(j))) break;
                else set.add(str.charAt(j));
            }
            max = Math.max(set.size(), max);
        }
        return max;
    }
}
StringBuffer优化:
// stringbuffer函数实现
   private static int maxSubString2(String s) {
        int max = 0;
        int fromIndex = 0;
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i <s.length(); i++) {
            // 查询出现的位置
            int index = sb.indexOf(s.charAt(i)+"",fromIndex);
            // 如果出现,则不为-1
            if(index!=-1) fromIndex = index+1;
            sb.append(s.charAt(i));
            // 当前位置的最长
            max = Math.max(max, sb.length()-fromIndex);
        }
        return max;
    }
HashMap【数组】:
  // 滑动窗口
  private static int maxSubString3(String s) {
        int n = s.length(), ans = 0;
        int[] index = new int[128]; // current index of character
        for (int j = 0, i = 0; j < n; j++) {
            i = Math.max(index[s.charAt(j)], i); // j对应字符最近出现的位置
            ans = Math.max(ans, j - i + 1); // 更新长度
            index[s.charAt(j)] = j + 1; // 为j对应字符赋值(默认长度为1)
        }
        return ans;
  }

2.数列问题
输入:2
输出:4
package com.bj.pufa;
/**
2、吃桃问题
描述:有桃子个数为N,第一天吃1/2,多吃一个,第二天吃剩余的1/2,多一个,经过m天,剩余1个,最初桃子的个数?
输入:2(m)
输出:4(N)
数列递推公式:
1 4 10 22...(2*(i-1)+2)
*
*/
import java.util.Scanner;


public class Test2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();
        int num = peachNum(m);
        System.out.println(num);
        scan.close();
    }
    
    private static int peachNum(int m) {
        int count = 1;
        for (int i = m; i >1; i--) {
            count = count*2+2;
        }
        return count;
    }
}


3.大数相加
输入: 111111
           222222
输出:333333
package com.bj.pufa;
/**
* 3、大数求和
输入:  111111
     222222
输出     333333
BigInteger big1 =  scan.nextBigInteger();
BigInteger big2 = scan.nextBigInteger();
System.out.println(big1.add(big2));
*/
import java.util.Scanner;


public class Test3 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String num1 = scan.nextLine();
        String num2 = scan.nextLine();
        String num = addTwoNum(num1,num2);
        System.out.println(num);
        scan.close();
    }
    private static String addTwoNum(String num1, String num2) {
        char charsNum1 [] = num1.toCharArray();
        reverseString(charsNum1);
        char charsNum2 [] = num2.toCharArray();
        reverseString(charsNum2);
        // 进位,当前位
        int upNum = 0, curNum = 0;
        // 最小长度
        int len = charsNum1.length>charsNum2.length?charsNum2.length:charsNum1.length;
        StringBuffer sb = new StringBuffer();
        int i;
        // 根据最小长度求和
        for (i = 0; i < len; i++) {
            int data = (Integer.parseInt(charsNum1[i]+"")+Integer.parseInt(charsNum2[i]+""))+upNum;
            upNum = data/10;
            curNum = data%10;
            sb.append(curNum);
        }
        // 处理长的字符数组
        while(i<charsNum1.length){
            int data = Integer.parseInt(charsNum1[i]+"")+upNum;
            upNum = data/10;
            curNum = data%10;
            sb.append(curNum);
            i++;
        }
        while (i<charsNum2.length) {
            int data = Integer.parseInt(charsNum2[i]+"")+upNum;
            upNum = data/10;
            curNum = data%10;
            sb.append(curNum);
            i++;
        }
        // 注意处理最后一位
        if(upNum!=0){
            sb.append(upNum);
        }
        return sb.reverse().toString();
    }
    // 可以使用StringBuffer.reverse(str)完成翻转
    public static void reverseString(char[] chars){
        int start = 0;
        int end = chars.length-1;
        while (start<end) {
            char ch = chars[start];
            chars[start] = chars[end];
            chars[end] = ch;
            start++;
            end--;
        }
    }
}
双指针优化:
// 双指针的方法
    public String addStrings1(String num1, String num2) {
        StringBuffer sb = new StringBuffer();
        int len1 = num1.length()-1;
        int len2 = num2.length()-1;
        int carry = 0;
        while (len1>=0 && len2>=0) {
            int data = num1.charAt(len1)-'0'+num2.charAt(len2)-'0'+carry;
            carry = data/10;
            sb.append(data%10);
            len1--;
            len2--;
        }
        while (len1>=0) {
            int data = num1.charAt(len1)-'0'+carry;
            carry = data/10;
            sb.append(data%10);
            len1--;
        }
        while (len2>=0) {
            int data = num2.charAt(len2)-'0'+carry;
            carry = data/10;
            sb.append(data%10);
            len2--;
        }
        if(carry!=0){
            sb.append(carry);
        }
        return sb.reverse().toString();
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值