- 博客(18)
- 收藏
- 关注
原创 赛博时代的梦中呓语
软件公司 Domo 曾经预计,到 2020 年,全球人均每秒将产生 1.7 MB 数据。中国拥有 14 亿人口,每年产生的数字信息约占全球 13%。在北京早高峰的一小时里,超过 100 万人坐上地铁,他们低头滑动手机时,数以千计的 TB 级数据不断被创造出来,在终端与基站之间传播,被传输至贵州、甘肃等地的数据中心里。以上信息来自博客园https://news.cnblogs.com/n/690651/看到这篇文章的资料时我感到很惊讶,每秒都有TB级的数据被制造出来,我想把人类文明前几千年的图书全部存进计
2021-04-04 22:27:07
146
原创 TCP为什么是三次握手
TCP协议本身是为了实现可靠传输,并在可靠的基础上,尽量最大化传输效率。可靠如何保证?为了实现数据传输的可靠,TCP连接双方,各自维护着一个序列号,用以确认对方是否完整接受到了自己发送的数据包。如何确认?比如我的序列号现在是1000,我发送给你1000个字节的数据,我的序列号变为了2000。你接收完数据之后,返回一个确认给我,告诉我你收到了我的数据包,同时你要返回我的序列号,按你收到的数据量。你返回给我1800,与我当下的序列号不一致,那我知道在传输过程中丢失了200个字节的数据,所以我会重发上一次
2021-04-03 13:24:40
168
原创 Spring问题记录
1.线程安全问题SpringBean默认情况下都为单例,如controller,service,但Controller在实际使用中一定是并发访问的,这就涉及线程安全问题。是否会出现线程安全问题要分两种情况:一:controller中没有成员变量,或者有成员变量但是是无状态的。如果没有成员变量,虽然是多线程去操作controller这个单例,但是都只是调用其方法,而方法在调用时开辟的内存空间在虚拟机栈,栈空间是线程私有的,不会出现线程安全问题。如果有成员变量,但是是无状态的,比如注入controll
2021-03-25 13:43:47
171
原创 JDK动态代理与cglib动态代理
JDKSpring aop默认使用jdk动态代理。jdk动态代理要求被代理对象是某个接口的实现类。为什么呢,先看一个简单的例子//一个接口public interface FoodService { void makeNoddles(); void makeChicken();}//被代理对象的类(实现了接口)public class FoodServiceImpl implements FoodService{ @Override public void m
2021-03-23 16:21:54
129
原创 redis的缓存穿透,缓存击穿,缓存雪崩
缓存穿透问题现象:访问缓存和数据库中都没有的数据,可能被恶意用户反复发起此种请求,导致数据库压力过大。解决方案:接口层增加一次检验,拦截明显错误的数据访问请求,如对查询ID<0的用户的请求直接拦截。对数据库也没有取到的值设置一个null值,存到缓存中,可以设置较短的过期时间。使用布隆过滤器缓存击穿问题现象:热点数据缓存到期,但此时有大量并发请求访问此热点数据,所有请求直接转到数据库,造成数据库瞬间压力过大甚至宕机。解决方案:设置热点数据永不过期;加互斥锁,当缓存到期时,后
2020-12-20 17:11:36
148
1
原创 Java的形参、实参与传值调用、传地址调用
形参:方法声明时小括号内声明的变量,如下面的 int i:void fun(int i){i=i+1;}是为了声明此方法需要传入的参数类型。在方法被调用时创建,在方法结束时销毁,只作用于方法内部。实参:调用用方法时,实际传入的参数,如下定义了int a,并在调用fun()方法时将a作为实参传入:int a=1;fun(a);一般在方法调用前就已创建并初始化。那么在一次方法调用,传参的过程中发生了什么?虚拟机在栈中为方法开辟了内存空间,并创建了形参,然后将实参的值赋给了形参。在方法结
2020-11-18 17:19:43
648
原创 为什么说Java是伪泛型?
因为Java的泛型只在编译期起作用,就是在我们写代码时,起到一个检查的作用,当代码跑起来时,其内部并没有泛型。下面一个简单的例子就可以证明这一点。通过反射,我们可以不受约束地将一个任意类型的元素添加到一个有泛型的集合中,如下:// 这个方法可以给穿进来的泛型集合添加任意类型的元素 public <T> void add(List<T> al,Object obj) throws Exception { Class cls= al.getClass();
2020-11-11 16:09:57
756
2
原创 一个任意字段查询的通用方法
我们在编写程序时应该尽量提高代码的复用性,力求简洁,并且在简洁的情况下,依然可以完整地实现相应的功能。在项目练习中,经常需要写操作数据库的方法,比如在实现注册登录业务时,需要查询数据库,并通过返回的结果集判断是否可以注册或登录。不同情况下有不同的查询条件,相应的也就有不同的查询语句。比如注册时,一般用户名不可重复,所以我们需要查询数据库中此用户名是否已存在。如果用户名不存在,即没有查询到结果,才可以注册。// 查询返回user中所有userName为tom的数据String sql="select *
2020-10-13 16:05:35
833
1
原创 JSP内置对象
JSP全称Java Server Pages,可以看做是一种特殊的Servlet。其部署在服务端,可以根据请求内容动态生成web网页返回给请求者。JSP整体以html网页为模板,部分内容可以动态生成,丰富了网页的功能。JSP具有如下特点:能以模板化的方式简单、高效地添加动态网页内容。可利用JavaBean和标签库技术复用常用的功能代码(设计好的组件容易实现重复利用,减少重复劳动)。标签库不仅带有通用的内置标签(JST
2020-10-13 15:11:44
296
原创 Servlet
简介 Servlet是Java的一个借口,此接口定义了一套处理网络请求的规范。它有一个实现类GenericServlet,GenericServlet有一个子类HttpServlet。我们一般通过继承HttpServlet并重写它的几个方法来实现具体的业务逻辑,其中主要是doGet和doPost方法。写好的Servlet运行在 Web 服务器或应用服务器上,作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP
2020-10-13 14:43:06
80
原创 一个简单的form表单验证
在用html以及javascript写一个简单的表单验证时遇到了不少小问题。因为javascript是脚本语言不用编译和检查,所以一旦代码上出现一些小问题可能很难发现。我的代码如下// An highlighted block<script> function check(form) { var n=form.username.value; if(n.length==0) { document.getElem
2020-09-19 18:13:44
399
原创 tomcat运行startup时一闪而过
一般都是环境变量没配置好。Tomcat运行依赖JAVA_HOME。有的人可能之前配置java路径时是直接在系统变量path里面添加了jdk的路径。此时就需要创建JAVA_HOME环境变量,并为其设置JDK的路径。如图,变量值填入你JDK的路径。之后一路确定就好了。...
2020-09-19 17:46:24
153
原创 泛型
泛型泛型即“参数化类型。”就是将声明时需要指定的类型也定义为参数。在具体使用时,再给定具体的类型。这样不用创建新类型,就可以由泛型来实现参数的多类型。泛型有三种,分为泛型接口,泛型类,和泛型方法。泛型接口// 定义泛型接口public interface Generator<T>{public T next();}//当一个类实现此接口时,如果不传入类型实参(即给定 T 的具体类型),则这个类也必须定义为泛型类。class FunctionGenerator<T>
2020-09-01 08:12:12
281
原创 数组、链表、hashmap
数组数组存储数据的方式是在内存中开辟一块连续的空间,按照数组中元素索引的顺序依次存储元素。所以数组元素在逻辑上是连续的,在真实的物理空间中也是连续的。因为这一特性,数组的查询十分便捷,可以直接访问任一数组元素获取该元素的值,其时间复杂度为O(1)。但是数组的删除与插入操作效率较低,因为插入或删除某元素,很可能要同时移动大量的其他元素,其时间复杂度为O(n)。而且因为真实物理地址的连续性,数组一旦初始化完成,其长度就是固定的,所以当数组中元素的存储密度较小时,即数组比较空时,数组对空间的利用率较低。且数组对
2020-08-24 23:45:15
613
原创 Java面向对象
写在开始的话 因为兴趣选择了学习编程这条路。但我明白仅仅是靠着一点兴趣是不够的,在这个信息井喷的时代,我们每天接受着各种碎片化的信息,这些信息也时常会引起我们的兴趣,但最终对我们来说有用的,让我们受益的,寥寥无几。因为兴趣并不等同于热爱。只有坚持为兴趣投入,才能最终将这点兴趣转变成热爱,我希望我可以做到。所以,我想记录下我的学习过程。如果回头能清晰地看到来时的脚印,向前的脚步也会更坚定吧。对Java面向对象的理解&nbs
2020-08-13 22:14:21
121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人