当前位置:首页 > 软件开发 > 正文

个人博客源码推荐 免费创建个人博客网站

个人博客源码推荐 免费创建个人博客网站

大家好,今天来为大家解答个人博客源码推荐这个问题的一些问题点,包括免费创建个人博客网站也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果...

大家好,今天来为大家解答个人博客源码推荐这个问题的一些问题点,包括免费创建个人博客网站也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

博客怎么高低层排版

博客的高低层排版可以通过HTML和CSS来实现。HTML可以用来定义页面的结构和内容,而CSS可以用来控制页面的样式和布局。具体操作步骤如下

1.在博客编辑器中打开HTML编辑器或源代码编辑器。

2.使用HTML标签来定义页面的结构和内容,如<div><p><h1>等。

3.使用CSS样式来控制页面的样式和布局,如设置字体颜色背景边框间距等。

4.可以使用CSS布局技术来实现高低层排版,如使用floatpositiondisplay等属性来控制元素的位置和大小。

5.在编辑完成后,保存并发布博客即可看到效果。

以上是实现高低层排版的基本步骤,具体操作还需要根据博客编辑器和个人需求进行调整。

程序员如何快速搭建个人独立博客

国内网站必须要有备案信息,单单备案就需要一个月之久,所以自己从头搭建一个博客并切能让别人访问的话,就少也是需要1个月左右的。

但是!!我们可以利用github给我们提供的pages功能来快速搭建一个不需要备案,不需要服务器,并且还有ssl证书的博客系统

不过免费的午餐也是有限制的

网站大小不能超过1GB

网站每月的带宽流量不超过100GB

每小时不超过10个版本更新

不过这些限制对我们普通博客来说其实没一定影响,如果你真能把这些资源都用光光的话,那么恭喜你,你发财了。

利用githubpages搭建博客的步骤

1.创建Blog对应的仓库,仓库名称格式:owner名称.github.io,这里仓库的名称必须严格按照格式进行命名

2.创建静态Blog文件目录,并上传代码到版本库

3.访问指定的GithubPages

自此,Blog就算搭建好了,剩下的就是,把网站相关资源也提交到版本库里去;

一般而言,为了方便管理博客(显得高大尚一点),可以选择【Jekyll+GithubPages】

如何高效阅读源代码

下面是之前写的一篇文章:《如何快速阅读源码》

本文探讨在需要了解一个开源项目时,如何快速的理清开源项目的代码逻辑!

以下是个人认为行之有效的方法:

先「跑起来」自顶向下拆解深入细节延伸改进

本文以Mybatis为例来进行演示!

先“跑起来”

程序界有个老传统,学习新技术时都是从「HelloWorld」开始的!无论是学习新语言时,打印「HelloWorld」;还是学习新框架时编写个demo!那为什么这里的「跑起来」要打个引号呢?

实际上,当你想要阅读一个开源项目的源码时,绝大部分情况下,你已经能够使用这个开源项目了!所以这里的“跑起来”就不是写个「HelloWorld」,也不是能跑起来的程序了!而是能__在你的脑子里「跑起来」__!什么意思?

Mybatis你会用了吧?那么请问Mybatis是如何执行的呢?仔细想想,你能否用完整的语句把它描述出来?

这里是Mybatis的官方入门文章!你是如何看这篇文章的?读一遍就行了吗?还是跟着文章跑一遍就够了吗?从这篇文章里你能获得多少信息?

我们来理一下:

安装如何在项目中引入Mybatis?Mybatis的groupId是什么?artifactId又是什么?目前最新版本是多少?从XML中构建SqlSessionFactorySqlSessionFactoryBuilder可以通过xml或者Configuration来构建SqlSessionFactory,那是如何构建的呢?xml配置了哪些信息?既然使用了xml,那肯定有xml解析,用什么方式解析的?xml里的标签都是什么意思:configuration,environments,transactionManager,dataSource,mappers。以及这些标签的属性分别是什么意思?SqlSessionFactory的作用是什么?不使用XML构建SqlSessionFactoryBlogDataSourceFactory,DataSource,TransactionFactory,Environment,Configuration这些类的作用是什么?*Mapper的作用是什么?为什么提供基于XML和Java的两种配置方式?这两种配置方式的优缺点是什么?从SqlSessionFactory中获取SqlSessionSqlSession的作用是什么?selectOne和getMapper的执行方式有什么区别?探究已映射的SQL语句*Mapper.xml的配置是什么?命名空间,id的作用是什么?*Mapper.xml是如何和*Mapper.java进行匹配的?匹配规则是什么?基于注解的映射配置如何使用?为什么提供基于XML和基于注解的两种映射配置?有什么优劣?作用域(Scope)和生命周期SqlSessionFactoryBuilder应该在哪个作用域使用?为什么?SqlSessionFactory应该在哪个作用域使用?为什么?SqlSession应该在哪个作用域使用?为什么?Mapper实例应该在哪个作用域使用?为什么?

回答出了上面这些问题!你也就基本能在脑子里把Mybatis「跑起来」了!之后,你才能正真的开始阅读源码!

当你能把一个开源项目「跑起来」后,实际上你就有了对开源项目最初步的了解了!就像「书的索引」一样!基于这个索引,我们一步步的进行拆解,来细化出下一层的结构和流程,期间可能需要深入技术细节,考量实现,考虑是否有更好的实现方案!也就是说后面的三步并不是线性的,而是__不断交替执行__的一个过程!最终就形成一个完整的源码执行流程!

自顶向下拆解

继续通过Mybatis来演示(限于篇幅,我只演示一个大概流程)!我们现在已经有了一个大概的流程了:

SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类

虽说每个点都可以往下细化,但是也分个轻重缓急!

我们是先了解怎么构建SqlSessionFactory呢?还是了解如何获取SqlSession呢?还是了解SqlSession如何执行sql的呢?

很明显,SqlSession去执行sql才是Mybatis的核心!我们先从这个点入手!

首先,你当然得先下载Mybatis的源码了(请自行下载)!

我们直接去看SqlSession!它是个接口,里面有一堆执行sql的方法!

这里只列出了一部分方法:

SqlSession就是通过这些方法来执行sql的!我们直接看我们常用的,也是Mybatis推荐的用法,就是基于Mapper的执行!也就是说「SqlSession通过Mapper来执行具体的sql」!上面的流程也就细化成了:

SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类SqlSession获取对应的Mapper实例Mapper实例来执行相应的sql

那SqlSession是如何获取Mapper的呢?Mapper又是如何执行sql的呢?

深入细节

我们来看SqlSession的实现!SqlSession有两个实现类SqlSessionManager和DefaultSqlSession!通过IDE的引用功能可以查看两个类的使用情况。你会发现SqlSessionManager实际并没有使用!而DefaultSqlSession是通过DefaultSqlSessionFactory构建的!所以我们来看DefaultSqlSession是如何构建Mapper的!

它直接委托给了Configuration的getMapper方法!

Configuration又委托给了MapperRegistry类的getMapper方法!

在MapperRegistry类的getMapper中:

通过type从knownMappers中获取对应的MapperProxyFactory实例如果不存在则抛出异常如果存在则调用mapperProxyFactory.newInstance(sqlSession)创建对应的Mapper

在这里knowMappers是什么?MapperProxyFactory又是什么?mapperProxyFactory.newInstance(sqlSession)具体做了什么?

其实很简单,knowMappers是个Map,里面包含了class与对应的MapperProxyFactory的对应关系!MapperProxyFactory通过newInstance来构建对应的Mapper(实际上是Mapper的代理)!

快接近真相了,看mapperProxyFactory.newInstance(sqlSession)里的代码:

这里干了什么?

通过sqlSession,mapperInterface和methodCache构建了一个MapperProxy对象然后通过Java的动态代理,来生成了Mapper的代理类将Mapper方法的执行都委托给了MapperProxy去执行如果是Object里的方法则直接执行否则执行MapperMethod的execute方法

最终实际还是委托给了sqlSession去执行具体的sql!后面具体怎么实现的就自行查看吧!

延伸改进

现在我们的流程大概是这样的一个过程:

SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类SqlSession获取对应的Mapper实例DefaultSqlSession.getMapperConfiguration.getMapperMapperRegistry.getMappermapperProxyFactory.newInstance(sqlSession)通过sqlSession,mapperInterface和methodCache构建了一个MapperProxy对象然后通过Java的动态代理,来生成了Mapper的代理类Mapper实例来执行相应的sql将Mapper方法的执行都委托给了MapperProxy去执行如果是Object里的方法则直接执行否则执行MapperMethod的execute方法最终还是委托给sqlSession去执行sql

现在我们大概知道了:

为什么Mapper是个接口了Mybatis基于这个接口做了什么

那么,

什么是动态代理(基础哦)?为什么使用动态代理来处理?基于动态代理有什么优点?又有什么缺点?除了动态代理,还有其它什么实现方式吗?比如说cglib?如果是其它语言的话,有没有什么好的实现方式呢?......

这个问题列表可以很长,可以按个人需要去思考并尝试回答!可能最终这些问题已经和开源项目本身没有什么关系了!但是你思考后的收获要比看源码本身要多得多!

再循环

一轮结束后,可以再次进行:

自顶向下拆解深入细节延伸改进

不断的拆解->深入->改进,最终你能__通过一个开源项目,学习到远比开源项目本身多得多的知识__!

最重要的是,你的流程是完整的。无论是最初的大致流程:

SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类

还是到最终深入的细枝末节,都是个完整的流程!

这样的好处是,你的时间能自由控制:

你是要花个半天时间,了解大致流程还是花个几天理解细节流程还是花个几周,几个月来深入思考,不断延伸你都可以从之前的流程中快速进行下去!

而不像debug那样的方式,需要一下子花费很长的时间去一步步的理流程,费时费力、收效很小,而且如果中断了就很难继续了!

总结

本文通过梳理Mybatis源码的一个简单流程,来讲述一个个人认为比较好的阅读源码的方式,并阐述此方法与传统debug方式相比的优势。

文章到此结束,如果本次分享的个人博客源码推荐和免费创建个人博客网站的问题解决了您的问题,那么我们由衷的感到高兴!

最新文章