css中定位的学习

首先页面代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div id='div1'>
<div id='div2'>
<div id='div3'>
<div id='div4'>

</div>

</div>

</div>
<div id='div22'>
</div>
</div>

<style>
#div1{
width: 700px;
height: 700px;
background: red;
margin-top: 50px;
margin-left: 50px;
}
</style>

relative和absolute

relative单独使用,代码如下

1
2
3
4
5
6
7
8
9
10
11
#div2{
width: 500px;
height: 500px;
background: rgb(17, 0, 255);
position: relative;
top: 20px;
left: 20px;
right: 0;
bottom: 20px;
}
}
阅读更多

Vue引入styles的一个小坑

在使用styus的时候,经常会定义一些css的常用变量,但是在引入styl文件一直使用的是@import '~styles/mixins',然后就是一直在报错,
后来经过了解发现,这种写法需要在build中的webpack.conf.js中设置style的别名,

1
2
3
4
5
6
7
8
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'styles': resolve('src/assets/styles')
}
},

然后将styles指向放styl的文件夹即可。

leetcode上两道判断n次方的题目

这两道题目都是判断一个数字是不是2(第一题),3(第二题)的n次方,在做第一题的时候思路基本上和标准解法想法相同,但是在做第二题的时候,看到了许多比较有创意的解法,所以记录下

判断一个数是不是2的n次方

解法一

这个解法也就是我第一次就想到的一个解法,就是做 & 运算,因为一个数字若是2的n次方,那么很明显就是这个数字的2进制肯定只会有一个1,例如:
32=100000 ,64 =1000000。所以只需要判断 n 与 n-1 做一个& 运算就可以知道了。

1
2
3
4
5
6
public boolean isPowerOfTwo(int n) {
if( n <1){
return false;
}
return (n & ( n-1)) ==0;
}
阅读更多

一次SpringBoot初始化引起的思考

在Spring中,经常会使用@Resource注解来自动装配一些Bean,但是在初始化的时候还是有一点小坑的,下面是一段代码,有三个类,分别是A,B,C。

类A:

1
2
3
4
5
6
7
8
9
10
11
@Service
public class A {

@Resource
B b;


public void someMethod(){
System.out.println(b.getC() == null);
}
}

类B:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Service
public class B {

@Resource
C c ;

public C cParam =getC();

public C getC(){
return c.getAnewC();
}

}
阅读更多

Spring的本质-Servlet初探

现在Java的web开发体系中,Spring以其轻量级,低耦合而占据了老大的地位,但是Spring的本质是什么,为什么在Spring里面不需要像以前写Servlet项目一样,需要配置web.xml。这些都需要我们去刨根问底的。

Servlet是什么

按照Servlet规范所解释的那样,Servlet是一个Web组件,就是类似于生物里面的病毒宿主一样,病毒还是那个病毒,但是离开了宿主之后就不能单独生存了。而宿主就是一个Servlet容器。(tomcat就是一个Servlet容器)

Servlet 是基于 Java 技术的 web 组件,容器托管的,用于生成动态内容。像其他基于 Java 的组件技术一样,
Servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节码,可以被基于 Java 技术的 web server
动态加载并运行。容器,有时候也叫做 servlet 引擎,是 web server 为支持 servlet 功能扩展的部分。客户端
通过 Servlet 容器实现的请求/应答模型与 Servlet 交互

在Tomcat的源码包里面,Servlet其实是一个接口,如下所示:

阅读更多

关于两道动态规划的思考

说到动态规划,离不开一个爬楼梯的问题和一个铺砖快的问题。
爬楼梯的问题:

一个N层的楼梯,一次可以走一步或者两步,求走到楼梯顶部的所有步数

铺砖快的问题:

一个2*n的地方,需要铺上瓷砖,但是瓷砖的规格只有 2x1 的,求多少种铺法。

计算到顶层的最小问题:

阅读更多

Java通过getResourceAsStream()读取不到文件的原因

首先出现这个原因的时候,需要弄清楚工程目录和编译目录。

工程目录

以IDEA为例,在IDEA里面,我们写代码的地方就是一个工程目录,常见的例如src下面的各种java文件,这种目录就可以称之为一个工程目录,例如如下所示:

工程目录主要存放的是一些配置文件或者一些java文件之类的,而经jvm编译之后的目录便是编译目录了

编译目录

阅读更多

使用Mybatis遇到的there is no getter 异常

在使用mybatis的时候有时候会遇到一个问题就是明明参数是正确的,但是还是会提示There is no getter XXX这个异常,但是一般的解决办法是在mapper里面添加@Param注解来完成是别的,那么为什么会遇到这个问题呢?

以下为举例代码:

Mapper层代码

1
2
3
4
5
public interface Pro1_Mapper {

Pro1_Studnet insertStu(Pro1_Studnet pro1_studnet);

}

实体类代码

阅读更多

Json的底层实现一览

在开始了解Json的原理之前,首先看一段代码,在这里以阿里的FastJson为例。

1
2
3
4
5
6
7
8
public class JsonRun {
public static void main(String[] args) {
JSONObject jsonObject =new JSONObject();
jsonObject.put("id","a");
jsonObject.put("name","b");
System.out.println(jsonObject.toJSONString());
}
}

当看到上述代码的时候,可能一般的程序员都会想到的是输出为如下Json

{“id”:”a”,”name”:”b”}
但是运行这段程序,你会发现控制台打印出来的是如下代码:
{“name”:”b”,”id”:”a”}

那么为什么会出现这种情况呢,翻开FastJson的源码便知道了,首先定位到 JsonObject 这个类的构造函数,如下:

阅读更多

将Jackson替换成Fastjosn

记得有一次的面试是。如何在Spring中将JackSon 替换为 FastJson,emmmm…当时的回答是只需要替换 pom.xml,然后在使用的时候引入FastJosn就行了,但是在当时显然没有理解到面试官的意图,既然面试官强调的是如何替换,那么修改pom.xml很显然不是面试官所想要的答案,那还有什么答案呢?

有一个方法可能是面试官想要的,那就是重写Spring的HttpMesageConverter方法,在这个方法里面引入FastJson的配置,然后替换掉Spring默认的Jackson

替换方式有几种,一种是返回一个HttpMesageConverter,另一种是继承WebMvcConfigurerAdapter 来实现 configureMessageConverters

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
// 输出空置字段
SerializerFeature.WriteMapNullValue,
// list字段如果为null,输出为[],而不是null
SerializerFeature.WriteNullListAsEmpty,
// 数值字段如果为null,输出为0,而不是null
SerializerFeature.WriteNullNumberAsZero,
// Boolean字段如果为null,输出为false,而不是null
SerializerFeature.WriteNullBooleanAsFalse,
// 字符类型字段如果为null,输出为"",而不是null
SerializerFeature.WriteNullStringAsEmpty);

fastJsonConfig.setCharset(Charset.forName("UTF-8"));
fastJsonConfig.setDateFormat("yyyy-MM-dd hh:mm:ss");
FastJsonHttpMessageConverter Converter = new FastJsonHttpMessageConverter();
Converter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = Converter;
converters.add(0,converter);
super.configureMessageConverters(converters);
}
阅读更多