/* 2 功能:生成博客目录的JS工具 3 测试:IE8,火狐,google测试通过 6 */ 7 var BlogDirectory = { 8 /* 9 获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top) 10 */ 11 getElementPosition:function (ele) { 12 var topPosition = 0; 13 var leftPosition = 0; 14 while (ele){ 15 topPosition += ele.offsetTop; 16 leftPosition += ele.offsetLeft; 17 ele = ele.offsetParent; 18 } 19 return {top:topPosition, left:leftPosition}; 20 }, 21 22 /* 23 获取滚动条当前位置 24 */ 25 getScrollBarPosition:function () { 26 var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop; 27 return scrollBarPosition; 28 }, 29 30 /* 31 移动滚动条,finalPos 为目的位置,internal 为移动速度 32 */ 33 moveScrollBar:function(finalpos, interval) { 34 35 //若不支持此方法,则退出 36 if(!window.scrollTo) { 37 return false; 38 } 39 40 //窗体滚动时,禁用鼠标滚轮 41 window.onmousewheel = function(){ 42 return false; 43 }; 44 45 //清除计时 46 if (document.body.movement) { 47 clearTimeout(document.body.movement); 48 } 49 50 var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置 51 52 var dist = 0; 53 if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出 54 window.onmousewheel = function(){ 55 return true; 56 } 57 return true; 58 } 59 if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离 60 dist = Math.ceil((finalpos - currentpos)/10); 61 currentpos += dist; 62 } 63 if (currentpos > finalpos) { 64 dist = Math.ceil((currentpos - finalpos)/10); 65 currentpos -= dist; 66 } 67 68 var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置 69 window.scrollTo(0, currentpos);//移动窗口 70 if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出 71 { 72 window.onmousewheel = function(){ 73 return true; 74 } 75 return true; 76 } 77 78 //进行下一步移动 79 var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")"; 80 document.body.movement = setTimeout(repeat, interval); 81 }, 82 83 htmlDecode:function (text){ 84 var temp = document.createElement("div"); 85 temp.innerHTML = text; 86 var output = temp.innerText || temp.textContent; 87 temp = null; 88 return output; 89 }, 90 91 /* 92 创建博客目录, 93 id表示包含博文正文的 div 容器的 id, 94 mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!), 95 interval 表示移动的速度 96 */ 97 createBlogDirectory:function (id, mt, st, interval){ 98 //获取博文正文div容器 99 var elem = document.getElementById(id); 100 if(!elem) return false; 101 //获取div中所有元素结点 102 var nodes = elem.getElementsByTagName("*"); 103 //创建博客目录的div容器 104 var divSideBar = document.createElement('DIV'); 105 divSideBar.className = 'sideBar'; 106 divSideBar.setAttribute('id', 'sideBar'); 107 var divSideBarTab = document.createElement('DIV'); 108 divSideBarTab.setAttribute('id', 'sideBarTab'); 109 divSideBar.appendChild(divSideBarTab); 110 var h2 = document.createElement('H2'); 111 divSideBarTab.appendChild(h2); 112 var txt = document.createTextNode('目录导航'); 113 h2.appendChild(txt); 114 var divSideBarContents = document.createElement('DIV'); 115 divSideBarContents.style.display = 'none'; 116 divSideBarContents.setAttribute('id', 'sideBarContents'); 117 divSideBar.appendChild(divSideBarContents); 118 //创建自定义列表 119 var dlist = document.createElement("dl"); 120 divSideBarContents.appendChild(dlist); 121 var num = 0;//统计找到的mt和st 122 mt = mt.toUpperCase();//转化成大写 123 st = st.toUpperCase();//转化成大写 124 //遍历所有元素结点 125 for(var i=0; i

java知识树

  1. https://blog.csdn.net/aitaozi11/article/details/79652943 (学习Java的9张思维导图)

 

 

针对技术栈学习

java技术栈

1. java基础

1.1 算法
  1. 图解排序算法(一)之3种简单排序(选择、冒泡、直接插入)

0赞, 时间复杂度均为O(n^2)

  1. 冒泡排序, 需要空间n + 1,; 时间复杂度比较比较需要(n + 1) * n/2; 交换最少为0, 最大为(n + 1) * n/2;
  2. 选择排序, 需要空间n + 1; 比较次数: 太难算了, 是count这个数
public static void main(String[] args) {
            int count = 0;
            int n = 1;
            for (int i = 0; i < n; i++ ){
                for(int j = n; j > i; j--){
                    count++;
                }
            }
            System.out.println(count);
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

交换次数: n - 1
3. 直接插入排序: 比较最多: (n + 1) * n/2;
交换最多: (n + 1) * n/2;

  1. 106赞 (图解算法—希尔排序)

希尔排序: 希尔排序是插入排序的变种, 逻辑间隔分组排序, 时间复杂度比较难算, 有一种分组(1, 5, 19, 41,
…)的时间复杂度为O(n^1.3); 大大的有进步, 了不起

  1. 理论基础 —— 排序 —— 直接选择排序

9赞 , 直接选择排序: 比选择排序还是要好一点的, 是在未排序的数组中比较, 但是时间复杂度仍然是O(n^2)

  1. 菜鸟, 快速排序

讲的不好, 看不懂

快速排序——详细且简单易懂的讲解

1赞, 图看懂一些

快速排序—(面试碰到过好几次)

46赞 , 还是上一篇1赞的写的好一些

快速排序: 时间复杂度为O(n * log(n)), 取基准数来不断分割数组的一种排序(分治法的思想)

  1. 五分钟弄懂有点难度的排序:堆排序

20赞, 堆排序利用完全二叉树的数据结构来排序, 分为大顶堆和小顶堆; 时间复杂度为O(n * log(n))

  1. [图解] 归并排序

42赞, 归并排序; 时间复杂度O(n * log(n)), 空间复杂度: O(n); 为稳定的排序法

2赞, 基数排序, 把数拆分成个位, 十位, 百位… 从个位到顶级位依次比较, 是一种稳定的排序算法, 时间复杂度为: O (nlog®m),其中r为所采取的基数,而m为堆数; 这里对基数和堆数的定义不明, 先放着


32赞, 比较好懂; 二叉查找树: 根节点比左叶子要大, 比右叶子要小; 查询的时间复杂度: O(log(n)), 极端不平衡的状态下时间复杂度为O(n); 中序遍历: 不懂

191赞, 中序遍历: 左节点 -> 根节点-> 右节点的遍历

  1. 红黑树特性:
    1.1. 根节点为黑色
    1.2. 节点有两种可能颜色, 黑色; 红色;
    1.3. 一个红黑树中, 任意根节点到叶子节点的路径上黑节点的数量相等
    1.4. 根节点为nil时为黑色
    1.5. 红色节点的两个子节点必然为黑色
  2. 应用场景: TreeSet,TreeMap
  3. 时间复杂度: O(log(n))
1.2 基本
  1. 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法

2赞, 没用, 实在是他娘的看不懂

  1. Java技术——你真的了解String类的intern()方法吗

106赞

1.3 设计模式
  1. java单例模式
  1. 单例模式: 饿汉模式天生线程安全; 2. 在多线程中懒汉模式需要点操作来保证线程安全; 3. 使用场景: 对有限资源的使用, 比如打印机
1.4 正则表达式
1.5 java内存模型以及垃圾回收算法
  1. JVM——Java虚拟机架构

65赞, 有点复杂, java虚拟机分为

  1. 类加载器: 将.class文件加载到java执行时数据区, 类加载机制, 使用双亲委派模型
  2. 执行引擎: 执行字节码, 或执行本地方法
  3. 执行时数据区: 分为:
    3.1. 只属于当前线程的私有区
    __3.1.1. pc计数器: 存当前线程跑到哪儿了
    __3.1.2. jvm栈: 局部变量表, 方法出口
    __3.1.3. 本地方法栈: 为Native方法服务
    3.2. jvm共享的公有区
    __3.2.1. 堆: 存实例对象
    __3.2.2. 方法区: 存.class(编译后的代码), 类信息
    ____3.2.2.1. 运行时常量池: 存常量(编译期已可知的常量)

Java虚拟机(JVM)你只要看这一篇就够了!

111赞, 太长了, 吃不消看; 前面部分讲的跟楼上是一样的

2. web方面

2.1 SpringMVC的架构设计
  1. Spring MVC是如何逐步简化Servlet的编程的
    备用

3赞, 太复杂, 看不懂

  1. JavaWeb开发模式的发展历程

5赞, 1. 纯servlet -> 2. 纯jsp -> 3. jsp + javaBean -> 4. jsp + javaBean + servlet (也就是MVC模式);

2.2 SpringAOP源码
2.3 Spring事务体系源码以及分布式事务Jotm Atomikos源码实现
2.4 数据库隔离级别
2.5 数据库
2.6 ORM框架: mybatis、Hibernate
2.7 SpringSecurity、shiro、SSO(单点登录)
2.8 日志
  1. 10分钟搞定–混乱的 Java 日志体系

log4j, log4j2, jul, logback 都是日志的具体实现, 而common-logging(动态)和slf4j(静态)则是作为门面来使用

  1. JAVA - 优雅的记录日志(log4j实战篇)

16年的文章, 日志可记录在控制台, 文件, 数据库, 也可配置日志记录级别, 定时记录日志.

2.9 datasource
  1. C3P0连接池使用教程

3赞, 每次请求连接数据库耗时大约为140ms, 而使用连接池耗时大约10-20ms

2.10 HTTPS的实现原理
  1. SSL/TLS协议运行机制的概述

拜阮一峰大神, 用于加密通讯;
1.针对问题 = > 解决方法:
__1.1. 窃听 => 加密传播
__1.2. 篡改 => 校验机制
__1.3. 冒充 => 身份证书
2. 握手增加到4次

3. 分布式、java中间件、web服务器等方面

3.1 ZooKeeper源码
3.2 序列化和反序列化框架
3.9 web服务器tomcat、ngnix的设计原理
  1. Tomcat整体架构浅析

17赞, 看不懂, 没用

  1. 一个Tomcat最多支持多少用户的并发?

0赞, tomcat7默认使用bio, 默认并发150个线程; tomcat8之后默认使用nio, 基于缓冲区的io;
当并发超过250个时应考虑集群; apr是异步非阻塞, nio是同步非阻塞, bio是同步阻塞

  1. 分析http请求从浏览器到tomcat全过程

2赞, 看不懂

  1. Tomcat处理HTTP请求原理

对上文一坨文字的解释, 做了一个图来表示, servlet作为最内层被包装的对象; 其他没看懂, 估计是做了层层处理

4.大数据方向

posted @ 2019-09-21 14:21  我的人生  阅读(710)  评论(0编辑  收藏  举报