发表于: 2018-03-29 23:55:43

1 507


今天完成的事情:

1. 剑指offer 面试题4 5

2. springboot durid+log4j2+fastjson


明天计划的事情

1. 面试

2. 看基础


遇到的问题:


收获:

剑指offer 面试题4

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

/**
* @description: 从二维数组的右上角的数字开始比较
* 因为数组自带有规律,
* 所以当 a[row][column]>S (要找的值)时,说明a[row][column]向下的值都比S
* a[row][column]<S 时,说明a[row][column]向左的值都小于S
* @param a
* @param s
* @return: boolean
* @author: Administrator
* @date: 2018-03-27  下午 3:48
*/

public static boolean find(int[][] a ,int s ){
   if(a == null){
      return false;
   }
   int row = 0;
   int column = a[row].length-1;
   while (row<a.length && column >=0   ){
        if(s<a[row][column] ){
           column--;
        } else if(s> a[row][column]){
          row++;
        }
        else {
           System.out.println(a[row][column]);
           return true;
       }
   }
  return false;
}


面试题5

题目要求:
实现一个函数,把字符串中的每个空格都替换成“%20”,已知原位置后面有足够的空余位置,要求改替换过程发生在原来的位置上。

    public static void problem5_1(char[] chars) throws Exception {

        //检查数组是否合法
     if(chars == null){
          throw new Exception("字符串为空");
       }

       //统计字符的长度(chars.length是数组长度)
       int i = 0;
       int numberOfChar = 0;//字符长度
     int numberOfSpace = 0;//空格个数
     while(chars[i]!='\u0000'){
           numberOfChar++;
           if (chars[i] == ' ') {
              numberOfSpace++;
           }
           i++;
       }

       int newLength = numberOfChar + numberOfSpace*2;
       if(newLength>chars.length){
           throw new Exception("字符串长度不足");
       }


       //指向字符组的最后一个字符(不是\u0000
     int indexOfOld = numberOfChar-1;
       //指向要复制的数字位置
     int indexOfNew = newLength -1;
       while (numberOfSpace!=0){
       if(chars[indexOfOld] == ' '){
               chars[indexOfNew--] = '0';
               chars[indexOfNew--] = '2';
               chars[indexOfNew--] = '%';
               numberOfSpace--;
           }
      else {
            chars[indexOfNew--] = chars[indexOfOld];
           }
           //完成转换或者换位后指针向0移动一位
        indexOfOld--;
       }
     }
  }


2. springboot durid+log4j2+fastjson

用的是springboot2.0.0 在中间遇到了一些问题

1. springboot的配置文件是.yml 但是springboot 的  dataSourse 对于druid的链接池没有默认的支持,所以不能通过配置文件的配置来进行使用

需要通过定制化来时用:

.yml配置文件:

spring:
 datasource:
   type: com.alibaba.druid.pool.DruidDataSource
   url: jdbc:mysql://127.0.0.1:3306/jnshu?defaultBatchValue=1000&serverTimezone=GMT%2b8&characterEncoding=utf8&useSSL=false
   driverClassName: com.mysql.cj.jdbc.Driver
   username: root
   password: qwe123
   #最大活跃数
  maxActive: 20
   #初始活跃数
  initialSize: 3
   #最大链接等待超时时间
  maxWait: 6000
   #打开PSCache,并指定大小
  poolPreparedStatements: true
   maxPoolPreparedStatementPerConnectionSize: 20
   #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
  connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
   minIdle: 3
   timeBetweenEvictionRunsMillis: 60000
   minEvictableIdleTimeMillis: 300000
   validationQuery: select 1 from dual
   testWhileIdle: true
   testOnBorrow: false
   testOnReturn: false
   #配置监控统计拦截的filte,去掉后监控界面sql将无法统计,'wall'用于防火墙
  filters: stat,wall,log4j2


定制化:

@Bean
@Primary//@Primary表示这里定义的DataSource将覆盖其他来源的DataSource
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
   dataSource.setUrl(url);
   dataSource.setDriverClassName(driverClassName);
   dataSource.setUsername(username);
   dataSource.setPassword(password);
   dataSource.setMaxActive(maxActive);
   dataSource.setInitialSize(initialSize);
   dataSource.setMaxWait(maxWait);
   dataSource.setPoolPreparedStatements(poolPreparedStatements);
   dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
   dataSource.setMinIdle(minIdle);
   dataSource.setTimeBetweenConnectErrorMillis(timeBetweenEvictionRunsMillis);
   dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
   dataSource.setValidationQuery(validationQuery);
   dataSource.setTestWhileIdle(testWhileIdle);
   dataSource.setTestOnBorrow(testOnBorrow);
   dataSource.setTestOnReturn(testOnReturn);
   try {
      dataSource.setFilters(filters);
   } catch (SQLException e) {
      e.printStackTrace();
   }
   dataSource.setConnectProperties(connectionProperties);
   return dataSource;
}


druid 有内置的监控系统,可以监控接口,SQL等的链接情况,如同web应用一样可以访问数据,看他的源码,发现自带web页面

和SQL文件,要做持久化吗???


@Bean
public ServletRegistrationBean servletRegistrationBean(){
//创建servlet
   ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
   // 和上面的  /druid/*  作用一样,设置项目路径
   // servletRegistrationBean.addUrlMappings("/druid/*");
   //设置id白名单
   servletRegistrationBean.addInitParameter("allow","127.0.0.1");
   //设置ip黑名单,黑名单比白名单优先级高
   servletRegistrationBean.addInitParameter("deny","192.168.0.23");
   //设置管理台 用户
   servletRegistrationBean.addInitParameter("loginUsername","druid");
   servletRegistrationBean.addInitParameter("loginPassword","123456");
   //是否可以重置数据
   servletRegistrationBean.addInitParameter("resetEnable","false");
   servletRegistrationBean.setName("druid");
   return servletRegistrationBean;
}


@Bean
public FilterRegistrationBean filterRegistrationBean(){
//创建过滤器
   FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
   //设置过滤路径
   filterRegistrationBean.addUrlPatterns("/*");
   //忽略过滤形式
   filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
   filterRegistrationBean.setEnabled(true);
   filterRegistrationBean.setName("druid-filter");
   return filterRegistrationBean;
}


3. 进行JSON自定义格式转换的时候,教程上说的是继承  WebMvcConfigurerAdapter  这个类,但是发现,在2.0.0这个版本里已经废弃了这个接口,只能寻找新的办法:

  1. @EnableWebMvc+extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置

  2. extends WebMvcConfigurationSupport,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置

  3. extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式依旧使用springboot的@EnableAutoConfiguration中的设置

第三种方法已经被废弃,只能用1和2






返回列表 返回列表
评论

    分享到