发表于: 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这个版本里已经废弃了这个接口,只能寻找新的办法:
@EnableWebMvc+extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
extends WebMvcConfigurationSupport,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式依旧使用springboot的@EnableAutoConfiguration中的设置
第三种方法已经被废弃,只能用1和2
评论