前端埋点学习笔记 目的埋点是为了采集用户行为数据(例如页面访问路径,点击了什么元素),便于进行数据分析。三大类型现有的埋点采集方案可以大致被分为三种手动埋点需要调用埋点的业务方在需要采集数据的地方调用埋点的方法,可以根据需要在任意地点任意场景进行数据采集,采集信息也完全由业务方来控制流量可控(利)写死方法,不灵活(弊)可视化埋点运营人员通过可视化的界面拖拽配置实现,这些活动控件元素都带有唯一标识。通过埋点配置后台,将元素与要采集事件关联起来,可以自动生成埋点代码嵌入到页面中业务方工作量少
虚拟DOM学习笔记 思想核心思想:相对于 DOM 对象,原生的 JavaScript 对象处理起来更快。Virtual DOM 本质上就是在 JS 和 DOM 之间做了一个类似于缓存的东西。这就可以类比 CPU 和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存:既然 DOM 这么慢,我们就在它们 JS 和 DOM 之间加个缓存。CPU(JS)只操作内存(虚拟 DOM),最后的时候再把变更写入硬盘(DOM)。并且,每次计算出最少的需要更新的变化,然后再去修改真实的DOM互联网1.0那种静态页面信息向用户单向传播信息的时代早已
scorllTop兼容性问题 在实现“回到顶部”功能时,需要判断用户下拉页面的举例,来判断是否需要显示“回到顶部”的按钮。因此准备使用 document.body.scrollTop的值大小来判断。代码如下:window.onscroll = function(){ //滚动超出高度,显示按钮,否则隐藏 var backtop = document.body.scrollTop; //滚动超过三分之一的屏幕高度时,将按钮从 display:none设置成block if(backtop >= (pageloo
《Spring实战》笔记 第7章 Spring MVC的高级技术 文章目录Spring MVC配置的替代方案自定义DispatcherServlet配置添加其它的Servlet和Filter在web.xml中声明DispatcherServlet处理multipart形式的数据配置multipart解析器处理multpart请求处理异常将异常映射为HTTP状态码编写异常处理的方法为控制器添加通知跨重定向请求传递数据通过URL模板进行重定向使用flash属性Spring MVC配置的替代方案自定义DispatcherServlet配置在AbstractAnnotati
《Spring实战》笔记 第5章 构建Spring Web应用程序 文章目录Spring MVC起步跟踪Spring MVC的请求搭建Spring MVCSpring MVC起步跟踪Spring MVC的请求搭建Spring MVC配置DispatcherServletDispatcherServlet是Spring MVC的核心。在这里请求会第一次 接触到框架,它要负责将请求路由到其他的组件之中。在Servlet 3.0环境 中,容器会在类路径中查找实现 javax.servlet.ServletContainerInitializer接口的类,如果能发现的
《spring实战》笔记 第10章 Spring&JDBC 文章目录Spring的数据访问哲学了解Spring的数据访问异常体系数据访问模板化配置数据源使用JNDI数据源Spring能够帮忙消除持久化代码中哪些单调枯燥的数据库访问逻辑可以依赖Spring来处理底层的数据访问,这样就可以专注于应用程序中数据的管理了Spring的数据访问哲学为了避免持久化的逻辑分散到应用的各个组件中,最好将 数据访问的功能放到一个或多个专注于此项任务的组件中。这样的组件通常称为数据访问对象(data access object,DAO)或Repository。为了避免应用与特
类加载器概述 文章目录什么是类加载器?JDK中自带了3个类加载器怎么加载的双亲委派机制什么是类加载器?专门负责加载类的命令/工具ClassLoaderJDK中自带了3个类加载器启动类加载器扩展类加载器应用类加载器String s = “abc”代码在开始执行之前,会将所需要的类全部加载到JVM中通过类加载器加载,看到以上代码,类加载器会找String.class文件,找到就加载怎么加载的首先,通过“启动类加载器”加载启动类加载器专门加载:\jre\lib\rt.jar中的类rt.jar都是
反射 文章目录获取Class的三种方式通过java语言中的反射机制可以操作字节码文件在 java.lang.reflect包下面获取Class的三种方式ClassClass c1 = Class.forName("java.lang.String");Class.forName是一个静态方法方法的参数是一个字符串,是类的全限定类名java中任何一个对象都有一个方法,叫做getClass()在Object中String s = "abc";Class x = s.getClass();
Nginx入门 文章目录正向代理和反向代理负载均衡Nginx是一个高性能的Http和反向代理Web服务器,同时也提供了IMAP/POP3/SMTP服务 正向代理和反向代理代理客户端的就是正向代理:比如VPN代理服务器端的就是反向代理负载均衡Nginx提供的负载均衡策略有两种:内置策略和扩展策略内置策略轮询加权轮询lp hash轮询:依次来加权轮询:iphash:对客户端请求的ip进行Hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决
多线程 文章目录多线程什么是进程?线程?实现线程的方式编写一个类,继承java.lang.Thread,重写run方法,new实例,调start编写一个类,实现java.lang.Runnable接口,实现run方法使用匿名内部类两种方法对比多线程什么是进程?线程?进程是一个应用程序线程是进程的一个执行单元(执行场景)一个进程可以启动多个线程进程A和进程B的内存独立不共享线程A和线程B,在Java语言中,堆内存和方法区内存共享,但是栈内存独立,一个线程一个栈启动10个线程,就有10个栈空间,每个栈与
对象的序列化和反序列化 文章目录基础用法序列化多个对象基础用法红色箭头标出来的就是序列化反过来就是反序列化,根据编号来一块一块组装序列化:拆分 Serialize 将java对象的状态保存下来的过程,用ObjectOutputStream反序列化:组装 DeSerialize 将硬盘上的数据重新恢复到内存中,恢复成java对象 ObjectInputStream因为有数据库的存在,所以不是很常用有异常要处理,可以try catch 也可以直接扔出去不管如果是单纯的普通Student类,这样运行会爆出异常说
TreeSet自定义类型的排序 Comparable 和 Comparator 需要给自定义类型实现比较接口实现了比较接口以后,不需要再写equals了,因为comapreTo已经帮忙比较的事情,如果两个对象相等,compareTo的结果是0,新的值会覆盖旧的值到 add(p2)的时候会报错说ClassCastException: Person cannot be cast to class java.lang.Comparable因为TreeSet调用add方法,其实是底层调用了 TreeMap 的 put方法new TreeSet<>() new 的时候,
《Spring实战》笔记 Ch3 高级装配 文章目录高级装配环境与profile高级装配一种方式就是在单独的配置类(或XML文件)中配置每个bean, 然后在构建阶段(可能会使用Maven的profiles,activation属性)确定要将哪一个配置编译到可部署的应用中。环境与profile...
《Spring实战》笔记 Ch2 装配Bean 文章目录装配BeanSpring配置的可选方案自动化创建bean创建可被发现的Bean为组件扫描的bean命名设置组件扫描的基础包通过为bean添加注解实现自动装配通过Java代码装配Bean创建配置类声明简单的bean借助JavaConfig实现注入通过XML装配bean创建XML配置规范声明一个简单的bean借助构造器注入初始化bean装配BeanSpring配置的可选方案三种装配Bean的方式:使用XML文件进行显式的配置使用Java代码,创建一个JavaConfig的java文件,用代码
java: 错误: 无效的源发行版:15 最近把java的版本从15换到了8于是再跑之前java15创建的项目出现了这个报错在尝试了网上的方法之后还是没用最后怀疑是Maven出了问题,一看果然这里也是要从15改成8的https://blog.csdn.net/qq_37252519/article/details/110069418如果这个方法不行,上面这个博客比较详细,应该可以解决问题...
Java 两个Integer对象的值一样,用 == 比较结果确实不相等 HashMap<Character, Integer> mapS = new HashMap();HashMap<Character, Integer> mapT = new HashMap();/***省略**/for(Map.Entry<Character, Integer> entry : mapT.entrySet()) if (mapS.get(entry.getKey()) != entry.getValue()) { re.
数据结构与算法学习笔记 哈希表 哈希表哈希函数哈希函数算出来的就是哈希值哈希碰撞Map vs SetHashSet 和 HashMap 略快于 TreeSet 和 TreeMap但是TreeSet和TreeMap更加有序
体系结构 07 可扩展架构后续 可扩展架构后续遗留问题如何解决水平扩展系统中的缓存和会话等状态问题?使用负载均衡器,如HAProxy,使得系统能够水平扩展。但是由于请求被分发到不同的backend,在原来的web系统中间,如果使用了缓存技术,在某一个服务实例上面生成了缓存,因为下一个请求可能不发送到它那儿,所以缓存没有发挥它的直接作用,导致缓存的优势没有发挥出来。更严重的是说,如果应用本身是带状态的(虽然http本身是一个无状态协议,但是可以通过session和cookie来实现多个请求放置在一个会话中间来管理),请求被发送到不同
体系结构06 可扩展架构 文章目录可扩展架构问题来源扩展实现负载均衡可扩展架构问题来源CS/BS架构技术挑战扩展垂直扩展 Scale Up硬件提高垂直扩展(更强的硬件) => 水平扩展(更多的硬件)实现负载均衡为了避免load balancer失效:增加back load balancer冗余...
数据结构与算法学习笔记 堆栈和队列 文章目录定义定义Stack - First in Last Out (FILO)Array or Linked ListQueue - First In First Out (FIFO)Array or Doubly Linked List题目链接https://leetcode.com/problems/backspace-string-compare/description/https://leetcode.com/problems/implement-queue-using-