Help
RSS
API
Feed
Maltego
Contact
Domain > kingvirre.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-09-15
151.101.229.147
(
ClassC
)
Port 80
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 102558Server: GitHub.comContent-Type: text/html; charsetutf-8Last-Modified: Mon, 25 Jan 2021 09:21:52 GMTAccess-Control-Allow-Origin: *ETag: 600e8db0-1909eexpires: Fri, 13 Sep 2024 04:33:31 GMTCache-Control: max-age600x-proxy-cache: MISSX-GitHub-Request-Id: 29B6:2C05C7:1B3CA01:1C07C82:66E3BE43Accept-Ranges: bytesAge: 0Date: Sun, 15 Sep 2024 05:32:37 GMTVia: 1.1 varnishX-Served-By: cache-hnd18743-HNDX-Cache: HITX-Cache-Hits: 0X-Timer: S1726378357.336943,VS0,VE212Vary: Accept-EncodingX-Fastly-Request-ID: 8e7027fed674ecd4c9451df53cb34690fda13f65 !DOCTYPE html> html classtheme-next pisces use-motion langen>head> meta charsetUTF-8/>meta http-equivX-UA-Compatible contentIEedge />meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1/>meta nametheme-color content#222>meta http-equivCache-Control contentno-transform />meta http-equivCache-Control contentno-siteapp /> link href/lib/fancybox/source/jquery.fancybox.css?v2.1.5 relstylesheet typetext/css />link href/lib/font-awesome/css/font-awesome.min.css?v4.6.2 relstylesheet typetext/css />link href/css/main.css?v5.1.4 relstylesheet typetext/css /> link relapple-touch-icon sizes180x180 href/images/apple-touch-icon-next.png?v5.1.4> link relicon typeimage/png sizes32x32 href/images/favicon-32x32-next.png?v5.1.4> link relicon typeimage/png sizes16x16 href/images/favicon-16x16-next.png?v5.1.4> link relmask-icon href/images/logo.svg?v5.1.4 color#222> meta namekeywords contentHexo, NexT />meta propertyog:type contentwebsite>meta propertyog:title contentKingvirre>meta propertyog:url contenthttp://yoursite.com/index.html>meta propertyog:site_name contentKingvirre>meta propertyog:locale contenten>meta nametwitter:card contentsummary>meta nametwitter:title contentKingvirre>script typetext/javascript idhexo.configurations> var NexT window.NexT || {}; var CONFIG { root: /, scheme: Pisces, version: 5.1.4, sidebar: {position:left,display:post,offset:12,b2t:false,scrollpercent:false,onmobile:false}, fancybox: true, tabs: true, motion: {enable:true,async:false,transition:{post_block:fadeIn,post_header:slideDownIn,post_body:slideDownIn,coll_header:slideLeftIn,sidebar:slideUpIn}}, duoshuo: { userId: 0, author: Author }, algolia: { applicationID: , apiKey: , indexName: , hits: {per_page:10}, labels: {input_placeholder:Search for Posts,hits_empty:We didnt find any results for the search: ${query},hits_stats:${hits} results found in ${time} ms} } };/script> link relcanonical hrefhttp://yoursite.com//> title>Kingvirre/title> /head>body itemscope itemtypehttp://schema.org/WebPage langen> div classcontainer sidebar-position-left page-home> div classheadband>/div> header idheader classheader itemscope itemtypehttp://schema.org/WPHeader> div classheader-inner>div classsite-brand-wrapper> div classsite-meta > div classcustom-logo-site-title> a href/ classbrand relstart> span classlogo-line-before>i>/i>/span> span classsite-title>Kingvirre/span> span classlogo-line-after>i>/i>/span> /a> /div> p classsite-subtitle>人生自是有情始,此事不关风与月/p> /div> div classsite-nav-toggle> button> span classbtn-bar>/span> span classbtn-bar>/span> span classbtn-bar>/span> /button> /div>/div>nav classsite-nav> ul idmenu classmenu> li classmenu-item menu-item-home> a href/ relsection> i classmenu-item-icon fa fa-fw fa-question-circle>/i> br /> Home /a> /li> li classmenu-item menu-item-about> a href/about/ relsection> i classmenu-item-icon fa fa-fw fa-question-circle>/i> br /> About /a> /li> li classmenu-item menu-item-tags> a href/tags relsection> i classmenu-item-icon fa fa-fw fa-question-circle>/i> br /> Tags /a> /li> li classmenu-item menu-item-archives> a href/archives/ relsection> i classmenu-item-icon fa fa-fw fa-archive>/i> br /> Archives /a> /li> /ul> /nav> /div> /header> main idmain classmain> div classmain-inner> div classcontent-wrap> div idcontent classcontent> section idposts classposts-expand> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2021/01/08/linux-与-shell/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2021/01/08/linux-与-shell/ itempropurl>linux 与 shell/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2021-01-08T14:26:33+08:00> 2021-01-08 /time> /span> /div> /header> div classpost-body itemproparticleBody> h3 idgrep>a href#grep classheaderlink titlegrep>/a>grep/h3>h3 id正则表达式>a href#正则表达式 classheaderlink title正则表达式>/a>正则表达式/h3>ol>li>p>基本正则,^开头,$结尾。a-z0-9表示区间。*匹配0次或者多次/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>/pre>/td>td classcode>pre>span classline>seq 10 | grep '^.$' 打印出来1-9,只有一个字符的数字符合条件/span>br>span classline>seq 10 | grep '.$' 打印出来1-10/span>br>span classline>seq 10 | grep '^.*$' 打印出来1-10,一个字符或者两个字符的数字都符合条件/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>grep -E 扩展正则表达式。| 匹配多个表达式中的任意一个。()分组。/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>/pre>/td>td classcode>pre>span classline>seq 10 | grep -E '5|7' 只打印5或者7/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>grep -A -B -C 打印匹配内容的上下几行grep -o 每个匹配的内容,按独立的行展示grep -i 忽略大小写grep -v 不显示匹配的行grep pattern -r dir 递归搜索/p>/li>li>/li>/ol> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2021/01/08/sql语句-边用边学/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2021/01/08/sql语句-边用边学/ itempropurl>sql语句--边用边学/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2021-01-08T11:15:06+08:00> 2021-01-08 /time> /span> /div> /header> div classpost-body itemproparticleBody> h3 idcase-when>a href#case-when classheaderlink titlecase when>/a>case when/h3>ol>li>case when语法:以CASE开头,以END结尾/li>li>分支中WHEN 后跟条件,THEN为显示结果/li>li>ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加/li>li>END 后跟别名,可不加figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>/pre>/td>td classcode>pre>span classline>case when a>b then a else b end/span>br>span classline>case when status '1' then status else 0 end/span>br>/pre>/td>/tr>/table>/figure>/li>/ol>h3 idround>a href#round classheaderlink titleround>/a>round/h3>ol>li>round四舍五入保留figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>/pre>/td>td classcode>pre>span classline>round(x,d),x指要处理的数,d是指保留几位小数/span>br>span classline>round(x) ,其实就是round(x,0),也就是默认d为0/span>br>/pre>/td>/tr>/table>/figure>/li>/ol>h3 idifnull>a href#ifnull classheaderlink titleifnull>/a>ifnull/h3>ol>li>IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>/pre>/td>td classcode>pre>span classline>IFNULL("Hello", "RUNOOB")/span>br>/pre>/td>/tr>/table>/figure>/li>/ol> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/12/30/docker-启动storm实时流/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/12/30/docker-启动storm实时流/ itempropurl>docker 启动storm实时流/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-12-30T16:32:22+08:00> 2020-12-30 /time> /span> /div> /header> div classpost-body itemproparticleBody> h2 iddocker-启动storm实时流>a href#docker-启动storm实时流 classheaderlink titledocker 启动storm实时流>/a>docker 启动storm实时流/h2>h3 id介绍>a href#介绍 classheaderlink title介绍>/a>介绍/h3>p>Storm是一套分布式,高容错的实时计算系统。Storm对于实时计算的意义等同于Hadoop对于批处理的意义,不同的是,Storm是做实时计算,Hadoop是做离线数据处理。数据平台所用到的数据流来源是kafka,Storm做数据业务逻辑处理,然后持久化到Mysql/Hive中。/p>h3 id数据流-amp-搭建脚本>a href#数据流-amp-搭建脚本 classheaderlink title数据流&搭建脚本>/a>数据流&搭建脚本/h3>p>因我们Storm是做的分布式的,我们用zookeeper做的分布式服务注册与发现,数据流使用Kafka,数据持久化到Mysql,业务中还用到了redis,所以梳理后,启动Storm平台,一共需要ZK,Kafka,mysql,redis共四个基础服务,流程图如图所示。其中 Kafka和storm在同一个zookeeper上注册,strom spot是Storm的数据流 storm bolt是数据处理逻辑。我们这套storm集群是由一个nimbus和三个supervisor,storm ui是页面服务。所有基础服务是写在了一个脚本执行的,脚本内容详见start_kafka_storm.sh脚本内容如下:figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>span classline>15/span>br>span classline>16/span>br>span classline>17/span>br>span classline>18/span>br>span classline>19/span>br>span classline>20/span>br>span classline>21/span>br>span classline>22/span>br>span classline>23/span>br>span classline>24/span>br>span classline>25/span>br>span classline>26/span>br>span classline>27/span>br>span classline>28/span>br>span classline>29/span>br>span classline>30/span>br>span classline>31/span>br>span classline>32/span>br>span classline>33/span>br>span classline>34/span>br>span classline>35/span>br>span classline>36/span>br>span classline>37/span>br>span classline>38/span>br>span classline>39/span>br>span classline>40/span>br>span classline>41/span>br>span classline>42/span>br>span classline>43/span>br>span classline>44/span>br>span classline>45/span>br>span classline>46/span>br>span classline>47/span>br>span classline>48/span>br>span classline>49/span>br>/pre>/td>td classcode>pre>span classline>zkNamezookeeper/span>br>span classline>kkNamekafka/span>br>span classline>stormuiNamestorm-ui/span>br>span classline>stormnimbusnimbus/span>br>span classline>stormsupervisorsupervisor/span>br>span classline>stormsupervisor1supervisor1/span>br>span classline>stormsupervisor2supervisor2/span>br>span classline>kafkaDir/opt/kafka_2.10-0.8.2.2/span>br>span classline>if "$1" "" ;then/span>br>span classline> docker rm -f $zkName/span>br>span classline> docker rm -f $kkName/span>br>span classline> docker rm -f $stormuiName/span>br>span classline> docker rm -f $stormnimbus/span>br>span classline> docker rm -f $stormsupervisor/span>br>span classline> docker rm -f $stormsupervisor1/span>br>span classline> docker rm -f $stormsupervisor2/span>br>span classline>/span>br>span classline> echo "start to run zookeeper"/span>br>span classline> docker run -d --name $zkName -v /etc/localtime:/etc/localtime -p 2181:2181 -t zookeeper镜像/span>br>span classline>/span>br>span classline> echo "start to run kafka"/span>br>span classline> docker run -d --name $kkName \/span>br>span classline> -e KAFKA_ADVERTISED_HOST_NAMEXX.XX.XX.XX \/span>br>span classline> -e KAFKA_ADVERTISED_PORT9092 \/span>br>span classline> -e KAFKA_BROKER_ID1 \/span>br>span classline> --env KAFKA_ZOOKEEPER_CONNECT$zkName:2181 \/span>br>span classline> --link $zkName \/span>br>span classline> -p 9092:9092 \/span>br>span classline> -v /etc/localtime:/etc/localtime \/span>br>span classline> -t kafka镜像/span>br>span classline>/span>br>span classline> locIP`ifconfig eth0 | grep "inet" | awk '{print $2}'`/span>br>span classline> echo "locIP $locIP"/span>br>span classline>/span>br>span classline> echo "start to run nimbus"/span>br>span classline> docker run -d --name $stormnimbus --nethost storm镜像 /opt/start_storm.sh local local nimbus/span>br>span classline>/span>br>span classline> echo "start to run ui"/span>br>span classline> docker run -d --name $stormuiName --nethost storm镜像 /opt/start_storm.sh local local ui/span>br>span classline>/span>br>span classline> echo "start to run supervisor"/span>br>span classline> docker run -d --name $stormsupervisor --nethost storm镜像 /opt/start_storm.sh local local supervisor/span>br>span classline>/span>br>span classline> echo "start to run supervisor1"/span>br>span classline> docker run -d --name $stormsupervisor1 --nethost storm镜像 /opt/start_storm.sh local local supervisor/span>br>span classline>/span>br>span classline> echo "start to run supervisor2"/span>br>span classline> docker run -d --name $stormsupervisor2 --nethost storm镜像 /opt/start_storm.sh local local supervisor/span>br>span classline>fi/span>br>/pre>/td>/tr>/table>/figure>/p>ul>li>p>获取当前机器ip:/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>/pre>/td>td classcode>pre>span classline>ifconfig eth0 | grep "inet" | awk '{print $2}'/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>docker run/p>/li>/ul>ol>li>-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用/li>li>–nethost:启动docker时增加–nethost选项,这样容器就和宿主机共用网络,容器中的app也就能访问宿主机服务了/li>/ol>ul>li>docker commit-a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。/li>li>p>docker tag/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>/pre>/td>td classcode>pre>span classline>docker tag 3cdac7d5a35a docker2.XX.com:8888/centos/xx_for_test:v1/span>br>span classline>3cdac7d5a35a:IMAGE ID,可以用docker images 查看/span>br>span classline>docker2.XX.com:8888:私有hub域名/span>br>span classline>centos:项目名称/span>br>span classline>xx_for_test:镜像名称/span>br>span classline>v1:镜像版本号/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>docker push:push到仓库docker push docker2.XX.com:8888/centos/xx_for_test:v1/p>/li>/ul>h3 idstorm基础镜像做修改>a href#storm基础镜像做修改 classheaderlink titlestorm基础镜像做修改>/a>storm基础镜像做修改/h3>p>在基础镜像中,storm的启动脚本没有直接调用storm/bin下的,因为考虑到以后zk和kafka地址可能会变,所以单独写了一份storm启动脚本,在启动前可替换zk和kafka地址,具体脚本内容详见start_storm.sh, 内容如下figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>span classline>15/span>br>span classline>16/span>br>span classline>17/span>br>span classline>18/span>br>span classline>19/span>br>span classline>20/span>br>/pre>/td>td classcode>pre>span classline>#!/bin/sh/span>br>span classline>zkaddr$1/span>br>span classline>nimbus$2/span>br>span classline>process$3/span>br>span classline>echo $zkaddr/span>br>span classline>echo $zkaddr/span>br>span classline>echo $process/span>br>span classline>if "$zkaddr" "local" ;then/span>br>span classline> dockerIP`ip route|awk '/eth0 proto kernel/ {print $9}'`/span>br>span classline> zkaddr$dockerIP/span>br>span classline> echo $zkaddr/span>br>span classline>fi/span>br>span classline>if "$nimbus" "local" ;then/span>br>span classline> dockerIP`ip route|awk '/eth0 proto kernel/ {print $9}'`/span>br>span classline> nimbus$dockerIP/span>br>span classline>fi/span>br>span classline>`sed -i 's/%zkaddr%/'$zkaddr'/g' /opt/storm/conf/storm.yaml`/span>br>span classline>`sed -i 's/%nimbusaddr%/'$nimbus'/g' /opt/storm/conf/storm.yaml`/span>br>span classline>/span>br>span classline>sh /opt/storm/bin/storm $process/span>br>/pre>/td>/tr>/table>/figure>/p> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/11/09/MyBatis-解除sql与业务代码的耦合/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/11/09/MyBatis-解除sql与业务代码的耦合/ itempropurl>MyBatis 解除sql与业务代码的耦合/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-11-09T15:13:18+08:00> 2020-11-09 /time> /span> /div> /header> div classpost-body itemproparticleBody> h2 idMyBatis>a href#MyBatis classheaderlink titleMyBatis>/a>MyBatis/h2>h2 id介绍>a href#介绍 classheaderlink title介绍>/a>介绍/h2>p> MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC(Java Database Connectivity)代码以及设置参数和获取结果集的工作。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 mybatis属于半orm(Object Relational Mapping),因为sql语句需要自己写。与其他比较标准的 ORM 框架(比如 Hibernate )不同, mybatis 并没有将 java 对象与数据库关联起来,而是将 java 方法与 sql 语句关联起来。/p>ul>li>优点:/li>/ul>ol>li>解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。/li>li>提供映射标签,支持对象与数据库的orm字段关系映射/li>li>提供对象关系映射标签,支持对象关系组建维护/li>/ol>ul>li>缺点/li>/ul>ol>li>编写SQL语句时工作量很大,尤其是字段多、关联表多时/li>li>二级缓存机制不佳(mybatis的一级缓存是基于sqlsession为生命周期的, mybatis的二级缓存是基于application为生命周期的,所以避免使用二级缓存)figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>/pre>/td>td classcode>pre>span classline>缓存是以namespace为单位的,不同namespace下的操作互不影响。/span>br>span classline>insert,update,delete操作会清空所在namespace下的全部缓存。/span>br>span classline>通常使用MyBatis Generator生成的代码中,都是各个表独立的,每个表都有自己的namespace/span>br>span classline>例如在UserMapper.xml中有大多数针对user表的操作。但是在一个XXXMapper.xml中,还有针对user单表的操作。/span>br>span classline>这会导致user在两个命名空间下的数据不一致。如果在UserMapper.xml中做了刷新缓存的操作,在XXXMapper.xml中缓存仍然有效,如果有针对user的单表查询,使用缓存的结果可能会不正确。/span>br>span classline>更危险的情况是在XXXMapper.xml做了insert,update,delete操作时,会导致UserMapper.xml中的各种操作充满未知和风险。/span>br>/pre>/td>/tr>/table>/figure>/li>/ol>h2 id安装操作>a href#安装操作 classheaderlink title安装操作>/a>安装操作/h2>p> MyBatis有两种方式构建SqlSessionFactory,一种是从 XML 中构建 SqlSessionFactory,一种是通过java代码构建 SqlSessionFactory。下面主要是关于通过java代码构建 SqlSessionFactory的。/p>ol>li>p>pom.xml中添加依赖/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>/pre>/td>td classcode>pre>span classline><dependency>/span>br>span classline> <groupId>org.mybatis</groupId>/span>br>span classline> <artifactId>mybatis</artifactId>/span>br>span classline> <version>3.2.8</version>/span>br>span classline> </dependency>/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>java代码构建SqlSessionFactory/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>span classline>15/span>br>span classline>16/span>br>span classline>17/span>br>span classline>18/span>br>span classline>19/span>br>span classline>20/span>br>/pre>/td>td classcode>pre>span classline>public static SqlSessionFactory getSession() {/span>br>span classline> if (null sessionFactory) {/span>br>span classline> final String user System.getProperty("");/span>br>span classline> final String password System.getProperty("");/span>br>span classline> final String databasenameURL "jdbc:mysql://" + System.getProperty("sqlHost") + "/" +System.getProperty("sqlDb")+ "?useUnicodetrue&characterEncodingUTF-8&useTimezonetrue&serverTimezoneGMT&allowMultiQueriestrue";/span>br>span classline> final String dbDriver "com.mysql.jdbc.Driver";/span>br>span classline>/span>br>span classline> DataSource dataSource new org.apache.ibatis.datasource.pooled.PooledDataSource(/span>br>span classline> dbDriver, databasenameURL, user, password);/span>br>span classline> TransactionFactory transactionFactory new JdbcTransactionFactory();/span>br>span classline> Environment environment new Environment("development", transactionFactory, dataSource);/span>br>span classline> Configuration configuration new Configuration(environment);/span>br>span classline> SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder()/span>br>span classline> .build(configuration);/span>br>span classline>/span>br>span classline> sessionFactory sqlSessionFactory;/span>br>span classline> }/span>br>span classline>/span>br>span classline> return sessionFactory;/span>br>span classline> }/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>configuration 添加映射器类(mapper class)/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>/pre>/td>td classcode>pre>span classline>public static void init() {/span>br>span classline> getSession().getConfiguration().addMapper(XXXMapper.class);/span>br>span classline> }/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>整体流程是 业务(test case)—-mapper–data映射器类是 Java 类,它们包含 SQL 映射注解从而避免依赖 XML 文件。添加XXXmapper.class映射器类。/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>span classline>15/span>br>/pre>/td>td classcode>pre>span classline>public interface XXXMapper {/span>br>span classline> /**/span>br>span classline> * @param id/span>br>span classline> * @return plan/span>br>span classline> *//span>br>span classline> @Select("SELECT * FROM plan WHERE id #{id}")/span>br>span classline> Plan select(int id);/span>br>span classline>/span>br>span classline> /**/span>br>span classline> * @param plan/span>br>span classline> * update plan/span>br>span classline> *//span>br>span classline> @Update("UPDATE `plan` SET `xxx_id` #{xxx_id} WHERE `id` #{id}")/span>br>span classline> void update(Plan plan);/span>br>span classline>}/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>XXX.class实体类/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>span classline>15/span>br>span classline>16/span>br>span classline>17/span>br>span classline>18/span>br>span classline>19/span>br>span classline>20/span>br>span classline>21/span>br>span classline>22/span>br>span classline>23/span>br>span classline>24/span>br>span classline>25/span>br>span classline>26/span>br>span classline>27/span>br>span classline>28/span>br>span classline>29/span>br>span classline>30/span>br>span classline>31/span>br>span classline>32/span>br>span classline>33/span>br>span classline>34/span>br>span classline>35/span>br>span classline>36/span>br>span classline>37/span>br>span classline>38/span>br>span classline>39/span>br>span classline>40/span>br>span classline>41/span>br>span classline>42/span>br>span classline>43/span>br>span classline>44/span>br>span classline>45/span>br>span classline>46/span>br>span classline>47/span>br>span classline>48/span>br>span classline>49/span>br>span classline>50/span>br>span classline>51/span>br>/pre>/td>td classcode>pre>span classline>public class Plan {/span>br>span classline> private int plan_id;/span>br>span classline> private int product_id;/span>br>span classline> private int plan_status;/span>br>span classline> private String vivo_deal_id;/span>br>span classline>/span>br>span classline> public int getid() {/span>br>span classline> return id;/span>br>span classline> }/span>br>span classline>/span>br>span classline> public void setid(int id) {/span>br>span classline> this.id id;/span>br>span classline> }/span>br>span classline>/span>br>span classline> public int getPlan_status() {/span>br>span classline> return plan_status;/span>br>span classline> }/span>br>span classline>/span>br>span classline> public void setPlan_status(int plan_status) {/span>br>span classline> this.plan_status plan_status;/span>br>span classline> }/span>br>span classline>/span>br>span classline> public static Plan select(int id) {/span>br>span classline> try (SqlSession session AdSqlSessionFactory.getSession().openSession()) {/span>br>span classline> PlanMapper mapper session.getMapper(PlanMapper.class);/span>br>span classline> Plan plan mapper.select(id);/span>br>span classline> return plan;/span>br>span classline> }/span>br>span classline> }/span>br>span classline>/span>br>span classline> public void update() {/span>br>span classline> try (SqlSession session AdSqlSessionFactory.getSession().openSession()) {/span>br>span classline> PlanMapper mapper session.getMapper(PlanMapper.class);/span>br>span classline> mapper.update(this);/span>br>span classline> session.commit();/span>br>span classline> }/span>br>span classline> }/span>br>span classline>/span>br>span classline> @Override/span>br>span classline> public String toString() {/span>br>span classline> ObjectMapper mapper new ObjectMapper();/span>br>span classline> try {/span>br>span classline> String json mapper.writeValueAsString(this);/span>br>span classline> return json;/span>br>span classline> //System.out.println(json);/span>br>span classline> } catch (JsonProcessingException e) {/span>br>span classline> e.printStackTrace();/span>br>span classline> }/span>br>span classline> return "{}";/span>br>span classline> }/span>br>span classline>}/span>br>/pre>/td>/tr>/table>/figure>/li>/ol> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/08/31/记录我的yun生活/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/08/31/记录我的yun生活/ itempropurl>记录我的yun生活/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-08-31T17:14:00+08:00> 2020-08-31 /time> /span> /div> /header> div classpost-body itemproparticleBody> h3 id第一章-惊喜、担忧-8-4-8-14>a href#第一章-惊喜、担忧-8-4-8-14 classheaderlink title第一章 惊喜、担忧 8.4-8.14>/a>第一章 惊喜、担忧 8.4-8.14/h3>p> 知道的那一刻是开心的,是意外的,因为没想到来的这么快,5月份刚做完孕前检查,胖腾还查出有轻微弱精症,做好了长期奋战调理的打算,婆婆8月1号到北京,说是给我们做点好吃的,调理身体,住一两个月。在8月4日晚上,还没来例假,推迟三四天了,平时例假也有推迟,没太当回事,然而我顺手一测,两道杠,就这么知道怀孕了。激动的给胖腾说这个消息,和家人分享消息,想着先不和同事说,要等到三个月稳定了再说。/p>p> 8.4号(礼拜二)晚上得知怀孕,从知道怀孕的那刻开始,一直伴随着担忧,hcg翻倍怎么样,会不会生化,终于,周五早早下班去了医院,抽血测hcg-886mIU/mL,孕酮-33.45ng/mL, 值还算正常,但是和小红书上同期的孕妈比较,略低,因为我例假周期长,安慰自己着床晚不着急。等到周日下午,又去了医院,隔天看翻倍,加急当天出来结果,hcg-2640mIU/mL,孕酮-40ng/mL,翻倍还可以,担忧的心情稍微有了点安慰。/p>p> 8.13日和8.14日是周四五,我请了两天年假,不敢说自己怀孕。8.13日(孕43天)要去办理母子健康手册,因为想着自己去办理还需要带居住证,为了在北医三院建档,需要海淀区的居住证,找黄牛500元,当时着急想在北医三建档,据了解北医三院产科比较权威,所以找的黄牛,其实母子健康手册是用不着找黄牛的,满43天自己也可以去社区办理。不过我算是花钱买安心了。/p>p> 8.14日要去北医三院第一次建档检查,专家号也是黄牛帮忙挂的,黄牛费900元,挂号费600元,不想让胖腾请假,我还花200块找了陪检护士,帮我提包指路,因为我对医院不太熟悉。挂产科专家号的人特别多,排队等了两个小时,10点等到12点才看上医生,因为抽血需要空腹,不然还得再跑一次医院,我一上午没吃饭,终于12点20多,空腹抽了我八管血,人都要晕了,血糖低,也没带啥吃的,高估了自己的能力。抽完血尿检、做心电图,预约下次B超,等到2点多才到家,到家婆婆给煮的韭菜鸡蛋馅饺子,当时胃口还不错。现在想想真是羡慕当时的胃(现在正经历孕吐)。/p>h3 id第二章-孕吐、难受-8-15-9-30>a href#第二章-孕吐、难受-8-15-9-30 classheaderlink title第二章 孕吐、难受 8.15-9.30>/a>第二章 孕吐、难受 8.15-9.30/h3>p> 8.15日–孕吐开始的日期。周六下午,吃了饭,带胖腾去查血型,没想到他也是o型血,一阵欣喜,因为孩子就不存在abo溶血了。验完血,我俩街上瞎溜达,在离家还有一段距离的时候,我突然头晕恶心,和胖腾说不溜达了回家吧,一路上一直拽着胖腾,身上没劲,头晕眼花,楼下等电梯的时候,我感觉自己已经站不住了,蹲地上才能舒服一些,到家后,想吐但是没吐出来,坐马桶上浑身冒汗,胖腾说把他吓坏了,因为我一瞬间身上就都是汗了,赶紧床上躺着不敢动了,怕胎儿出问题,因为那会还没意识到,孕吐就这么来了。周末也没咋吃啥东西,犯恶心。/p>p> 8.17-8.20,每天还在上班,还坚持坐地铁,挺佩服当时的自己,地铁上一直想吐,忍着,到公司直奔厕所,早上吃的水果稀饭吐得一点都不留。午饭晚饭吃饭前,先去厕所吐一吐。本来不想和同事说,但是孕吐的严重,不说大家也能猜到,和一个小组的同事说了。孕吐的第一周,因为来的突然,而且每天上班,没那么多时间矫情,该吐就吐,吐完继续工作。可能也是刚开始没那么严重。/p>p> 8.20日下午+8.21日,请了1.5天年假,8.20日下午去做B超。8.21日拿上之前所有结果看医生,去正式建档。北医三院建档需要两次专家号,我比较幸运,第一次看张龑医生的时候帮我约了下次她的专家号,省下了第二次挂号的黄牛费。胖腾请假陪我去的医院,帮我跑腿打印心电图结果,打听各种手续。第一次结果没啥异常,医生给我贴了个绿标,意味着比较安全,橙色红色代表产妇的高危危急程度。8.21日半天就建档完成,也算比较顺利。当时我已经有孕吐反应,打车来回路上、医院检查的时候都在犯恶心,医生见多了这种情况说没事,嘴里含点姜片就行。/p>p> 8.24-8.30,请了一周病假。孕吐最严重的时间,每天吐好几次,吃啥吐啥,喝啥吐啥,导致饭也不想吃,水也不想喝,见啥都恶心,从113瘦到了100斤。去医院查尿,不喝水尿也没多少,尿酮体4+,尿里面蛋白质啥的都有,去医院输了生理盐水、葡萄糖、平衡液、维生素b6,每天屁股针维生素b2. 输液也没多大用,输完继续吐胆汁带血丝。胃里啥东西也没有。每天生不如死、生无可恋,看到别人吃东西也想吐,闻到洗衣液味道也想吐,婆婆就把洗了的衣服晾到楼下。特别感谢婆婆,每天照顾我,倒水、切水果、做饭,啥都是买最好的,虽然我吃不下多少。每天刷小红书,不想活,想流产,吐完难受就哭,真的是只有睡着的几个小时是没感觉的,但是即使是睡觉也睡不踏实,晚上一醒来还是想吐,而且半夜起夜次数明显增多,一睁眼就开始恶心想吐,浑浑噩噩的熬过来。这辈子再也不愿意去经历的一段过程。/p>p> 8.31-9.29,这一个月,开始上班。上下班都打车,每天路费200块,打车费贵点不算啥,主要是难受,上班每天堵车,书包随身携带袋子,有时候忍不住,会吐袋子里。这辈子都忘不了那种实在忍不住咽回去最后还是吐出来的感觉,不敢想。每天在家吃早餐,水果主食稀饭比较丰盛。单位吃午饭晚饭,就是将就的吃点,米饭吃一丢丢,就一点点菜,晚上吃两个包子,多了不敢吃,就怕随时会吐。这段时间,胖腾和我一样遭受着折磨,白天游戏打不得,洗澡不能打有香味的沐浴露,洗手不能打香味的洗手液,晚上睡觉不能打呼,因为我会随时把他拍醒,我不舒服就总想他在身边陪着,端茶送水,喂饭。陪着洗澡,抹身体乳,吹头发,胖腾说自己就是小工,还不能有怨言哈哈。每天晚上睡觉会起夜三四次,有点尿就会醒,睡觉也不踏实,随时可以醒来的感觉。9.18号去医院定期检查,查了胎心和尿检,胎心142,11周+2可以听到胎心了。尿检一开始有点问题,重新喝水尿检才正常,中午在医院门口吃了肯德基,怀孕后第一次吃。当时胖腾说能吃肯德基了,9.20号一定就好了。但是9.23号又开始反复,孕吐就是这样,在你快要看到黎明的时候,又给你狠狠的一刀,让你怀疑人生。后来经过几周琢磨,胖腾开始每天给我按摩内关穴和足三里穴,缓解恶心、促进肠道蠕动缓解便秘,效果不大但是也还管点用,让胖腾每天有任务可做。在孕吐的这段时间,难受的时候心情就会非常低落,工作的时候,突然开始流眼泪,觉得自己不知道为啥要怀孕要生孩子,没有一点母爱的感觉,有时候甚至会怨恨肚子里有孩子,每个周末就在床上躺着,没有力气出门,上班就熬小时等下班,下班回去也是躺床上,电视剧也不追了,综艺也不看了,就是干啥都没有兴趣,我觉得自己是真的抑郁了。叶酸根本没吃几天,看到就想吐,其实是心里作用居多,孩子你一定要争气,别是残障儿啥的,到时候我估计会后悔。/p>p> 经过孕吐这段过程,真是很感叹母亲的伟大,不过从我本人来讲,孕吐很难受,我不会再要二胎的,为了我的身心健康。/p>p> 9.30号去做了NT,胖腾在看到NT结果的很开心,脑袋拍的比较清楚,胖腾一直喊着,和他比较像,是他娃,一个人盯着结果看了好久,嘴还咧着笑。这是孕吐到今天为止,最开心的一刻了吧。检查完还是去吃了肯德基,想不到三院附近有啥可吃的。吃完想着国庆后上班我想坐地铁,趁着胖腾在,我们打算坐地铁回家,走到地铁站,坐上地铁才发现人好多,而且孕肚不大,也没人让座,带着口罩还憋得慌,坐了两站,赶紧下车,还是打车回家了。这也打消了我国庆后上班想坐地铁的念头,还是乖乖打车。/p>p>img src/2020/08/31/记录我的yun生活/1.jpeg alt>/p>h3 id第三章-惊吓-10-1-10-30>a href#第三章-惊吓-10-1-10-30 classheaderlink title第三章 惊吓 10.1-10.30>/a>第三章 惊吓 10.1-10.30/h3>p> 10.1-10.11,本来计划着国庆休息时间长,可以去北京周围转转,10.1号一天没出门,10.1晚上发生的事情彻底打消了这个念头。因为怀孕导致便秘,上厕所总是待半个小时,下午我还做瑜伽,想着运动运动,结果晚上11点的时候,上厕所发现出血了,吓坏了,以为要流产,在家等了半天小时还是有出血,胖腾陪我大半夜打车去北医三院急诊,去了量血压,医生听了胎心是正常的,还取了宫颈分泌物,抽了血,当晚拿到血结果正常,医生还是给开了消炎药,让10.2号来医院再做个B超。医院回去凌晨2点多了赶紧睡觉休息,第二天起来就去了医院做b超,在排队做b超的过程中,又把早饭都吐了。幸好B超结果正常,就是胎盘略覆盖宫颈边缘,可能是胎盘低导致的出血,也可能上厕所使劲导致的。医生也没给个具体原因,就让回去卧床静养,所以,接下来的国庆长假,我就在床上度过了。二姐过来陪了我好几次,陪我聊天唠嗑,还能缓解下恶心。长期卧床导致的结果就是便秘加重了,想到那个时候都觉得好难熬。网上买了蜂蜜栓,也不敢用,总是担心出血。这次跑急诊,让我更谨慎了,之前大大咧咧觉得自己还能爬山呢,现在啥也不敢了,走路都稳稳的了。/p>p> 10月还是在吐,虽然整体在减轻,但是时不时来的孕吐还是让人崩溃。早上上班还是会吐,在家吃错东西也会吐,真难受。后面上下班还是每天打车,下午和晚上恶心尤其严重,下班回去就躺床上,有时喝点牛奶,尽量每天都早早就睡觉。因为担心娃,自己400块买了胎心仪,觉得有问题了,就在家听一下,听的次数多了,胖腾也熟练起来了,一下就能找到娃的位置。我们也给娃起了乳名,果果,男女通用。/p>p> 10.28号去产检,抽血自费做无创dna唐氏筛查,二姐陪我去做的产检,结果需要一周后才能知道。后来结果出来一切正常,悬着的心踏实一些了。/p>p> 10.30号公司开季度会,有一个不幸的消息,公司要开始996了,我很慌,怕太累影响了胎儿。纠结半天还是决定和领导说一声,周六可以去上班,平时上班时间想自由一些。领导最后也同意了,毕竟娃第一,受了这么多罪,娃要是有个意外,我真的会崩溃。绩效什么的先放一边,钱都不重要了。/p>p>img src/2020/08/31/记录我的yun生活/2.jpeg alt>/p>h3 id第四章-欣慰-11-1-12-31>a href#第四章-欣慰-11-1-12-31 classheaderlink title第四章 欣慰 11.1-12.31>/a>第四章 欣慰 11.1-12.31/h3>p> 11月份开始,大概是快18周,每天可以感受到胎动了,我工作之余,拿手戳一戳肚子,果果会很快给我回应,这种感觉还是很幸福的。我的崽终于不只是折磨我了,胖腾下班早的话,也会和果果说几句话,讲讲故事,睡前我也会听听古诗词,想让娃胎教学习一下。11.25号区做了常规产检,验尿听胎心,都没啥问题。11月一个月,果果胎动很频繁,而且从肚皮上可以明显看到这里那里踢出来一块,有时候动的很欢,但是腾宝突然把手放到肚子上的时候,就马上又不动了,不知道是在躲猫猫还是害怕爸爸。我把手放肚子上的时候,该咋动还是咋动。每天下午动的比较活跃。晚上睡觉不能平躺,一平躺估计果儿不舒服,就各种踢我,我就只能侧躺了,左右侧躺来回翻身。/p>p> 20周的时候,一时兴起,自己在家拍了孕妇剪影照,计划每四周拍一次,留作纪念。/p>p>img src/2020/08/31/记录我的yun生活/3.jpeg alt>/p>p> 12.7号,带果果去做了大排畸检查,果果非常配合,全程不到20分钟就出了,做检查之前我专门吃了个糖,看到别的孕妈来来回回检查好多次,腾宝说果果是个乖孩子,早上出门的时候腾宝叮嘱了果果几句,果果就真的很配合了。检查结果一切正常,正常大小,我还以为果果会偏大,没想到正常大小,22周+4,果果已经重一斤了,双顶径5.52cm,股骨长3.75cm,群里孕妈说果果像是个男孩,这会还啥也不知道。/p>p> 因为我一直不想果果长成巨大儿,我也不想孕后减肥困难,所以常吃粗粮,控制体重,争取每周只涨一斤,但是有时候是真的控制不住,想吃水果,想吃刺激食物,唉。/p>p> 12.19号,和腾宝按捺不住,想看看果果在肚子里干啥,看看果果的庐山真面目,于是我们去医生家里去做四维,以为果果会一如既往的很配合我们,一次过呢,结果到了医生家里,果果不咋动了,一直不给我们看正脸,总把头埋到最里面,还时不时拿手挡住脸,估计这个时间点,正在睡觉呢。医生让我起来走动走动,腾宝也一直给果果讲故事,拍肚子,果果就是不翻身,没办法,看不到脸了,就只是大概拍了个侧面,拍到了果果打哈欠的视频,真是是瞌睡果。最后也揭开了谜底,果果是个小男孩,和腾宝预测一致,我比较想要闺女,压力小还贴心,从那天开始一直给自己心里建设,我要有儿子了,怀的是个儿子。/p>p>img src/2020/08/31/记录我的yun生活/4.jpeg alt>/p>p> 12.23号去做常规产检,结果医生叮嘱我,尿检白细胞偏高,建议我去查泌尿外科或者肾内科,等后面检查了再说这个。/p>p> 腾宝晚上经常给果果讲故事,对话,给果果写诗,会问果果,你想要诗的意境是雄伟壮观就动一下,如果想要悲伤怀旧就动两下,让果果配合动,有时果果真的很配合,不知道是他刚想动呢,还是真的听懂了爸爸的话。反正但凡果果给出了回应,腾宝都会按照果果的要求去写诗或者给他讲故事啥的。果果是个幸福的果,是爸爸疼妈妈爱,爷爷奶奶盼来的孩子。希望果果以后能多体贴妈妈,毕竟怀胎十月,真的很辛苦。半夜有时候睡醒发现自己平躺的,第一反应就是摸摸果果有没有动。果果动的多了或者少了,都担心是不是绕颈了,如果在家里就赶紧打开胎心仪听听果果胎心。希望果果可以健健康康的长大。/p>h3 id第五章-开心、操心-2021-1-1>a href#第五章-开心、操心-2021-1-1 classheaderlink title第五章 开心、操心 2021.1.1->/a>第五章 开心、操心 2021.1.1-/h3>p> 元旦到了,果果也26周多了,闺蜜来家里,给我拍了几张照片,我的肚子在一天天变大,几天不见别人都能明显觉得娃大了,而且果果这会动的非常欢快。/p>p>img src/2020/08/31/记录我的yun生活/5.jpeg alt>/p>p> 1月20号,常规产检,尿检白细胞仍然偏高,留取了尿液细菌培养,1月24号去医院拿了结果,细菌培养没有问题。去肾内科看主任医师,医生也说没有啥问题,让多喝水,持续观察,有问题随时来医院。1.24号空腹抽了6管血,结果钙偏低、蛋白偏低、血常规血红蛋白偏低,有轻微贫血,我也没补什么药,希望果果健健康康,不要因为我没有吃补品而营养不良,我希望果果不要太大,而且我一吃补品就容易便秘孕吐,所以很排斥铁片钙片之类的药。果果听话好好健康的长大。/p>p> 1月16号,我和胖腾怕果果绕颈,借着上次没看到脸的缘故,又去罗医生家里看了四维,结果娃还是不配合,一直不肯露正脸,幸运的是没有绕颈,而且四维照片明显看出来,和胖腾长得比较像了,不知道会不会生出个小胖腾出来。哈哈/p>p> 1月24号下午吃了火锅吃的有点撑,此时是29周+3,晚上果果动的很厉害,连续动了两三个小时,把我和胖腾吓的差点去急诊,我们在家听了胎心没啥问题,就休息了,晚上每次醒来,我都刻意观察一下果果有胎动,才安心继续睡。第二天胎动也正常,就没再管了。孕晚期真的很让人操心,不动怕娃出事,胎动频繁又怕缺氧,每次稍微有点异常,都让人紧张半天,胖腾也是抱着肚子和果果对话。/p> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/02/03/java-类和对象/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/02/03/java-类和对象/ itempropurl>java-类和对象/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-02-03T17:24:57+08:00> 2020-02-03 /time> /span> /div> /header> div classpost-body itemproparticleBody> h2 id类>a href#类 classheaderlink title类>/a>类/h2>ol>li>public class是公共类,类名必须和文件名相同。类体中可以定义描述这个类的属性的变量,即成员变量。/li>li>类其实是我们自己创建的新的数据类型(自定义类型)。类的实例是对象。使用new操作符,可以创建类的实例或者对象,类中定义的每种变量都会被赋以其类型的初始值。使用一个同类型的对象变量,可以指向并操作这个实例。/li>/ol> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/01/19/java-HelloWorld/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/01/19/java-HelloWorld/ itempropurl>java-HelloWorld/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-01-19T21:54:24+08:00> 2020-01-19 /time> /span> /div> /header> div classpost-body itemproparticleBody> h2 id开发环境搭建>a href#开发环境搭建 classheaderlink title开发环境搭建>/a>开发环境搭建/h2>ol>li>下载安装 jdk,地址: a hrefhttps://res001.geekbang.org/tools/jdk-11.0.2_osx-x64_bin.dmg target_blank relnoopener>https://res001.geekbang.org/tools/jdk-11.0.2_osx-x64_bin.dmg/a>/li>li>检测 jdk 是否安装成功,javac -version, 或者 java -version/li>li>编写程序。在文本文档编写好后保存为HelloWorld.java,执行javac HelloWorld.java对java文件进行编译后,会生成HelloWorld.class文件,即java可识别的文件。执行java HelloWorld,程序成功运行。注意:class后面的名字是类名,java类名要和代码文件名一致,文件名后缀必须是小写的javafigure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>/pre>/td>td classcode>pre>span classline>public class HelloWorld{/span>br>span classline> public static void main(String args){/span>br>span classline> System.out.println("Hello World!")/span>br>span classline> }/span>br>span classline>}/span>br>/pre>/td>/tr>/table>/figure>/li>/ol>h2 id安装intelliJ-IDEA>a href#安装intelliJ-IDEA classheaderlink title安装intelliJ IDEA>/a>安装intelliJ IDEA/h2>ol>li>官网安装,社区免费版community/li>li>在IDEA里面,编译好的class文件在out或者target文件夹下面/li>/ol>h2 id基础概念>a href#基础概念 classheaderlink title基础概念>/a>基础概念/h2>ol>li>变量-创建和赋值/li>li>关键字:java的保留字,不能用来做名字,比如public、class、static、void、int/li>li>标识符: 一般是java中的各种东西的名字,比如类名、方法名等,不可以以数字开头,区分大小写/li>li>表达式-基本的一个运算、语句-由表达式组成、代码块/li>li>二进制、十进制、十六进制/li>li>bit和byte,一个二进制的位叫做一个bit,网络带宽单位都是bit;八个二进制位组成一个byte,硬盘存储单位是byte,byte是计算机中最基本的衡量储存的单位/li>/ol>h2 idjava基本数据类型>a href#java基本数据类型 classheaderlink titlejava基本数据类型>/a>java基本数据类型/h2>ol>li>整数类型——byte,值域-128到127/li>li>整数类型——short,占用2个byte,值域-32768到32767/li>li>整数类型——int,占用4个byte。java中整数缺省是int类型/li>li>整数类型——long,占用8个byte。后面要加L/li>li>浮点类型——float,占用4个byte,有精度。后面要加f/li>li>浮点类型——double,时候float的两倍,占用8个byte,java中浮点数缺省是 double类型/li>li>布尔类型——boolean,占用1个byte,true和false/li>li>char类型,占用2个byte,可以存储汉字。c语言char占用一个byte。值域是所有字符/li>/ol>h2 idrandom类和math-random-方法区别>a href#random类和math-random-方法区别 classheaderlink titlerandom类和math.random()方法区别>/a>random类和math.random()方法区别/h2>ol>li>p>Math.random()方法Math.random()默认产生大于等于0.0且小于1.0之间的随机double型随机数即:0.0<Math.random()<1.0但是稍加处理就可以产生任意随机数/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>span classline>15/span>br>span classline>16/span>br>span classline>17/span>br>span classline>18/span>br>span classline>19/span>br>span classline>20/span>br>span classline>21/span>br>span classline>22/span>br>span classline>23/span>br>/pre>/td>td classcode>pre>span classline>public class MathRandom {/span>br>span classline>/span>br>span classline> public static int getRandomInt(int num1,int num2)/span>br>span classline> {/span>br>span classline> int nnum1+(int)(Math.random()*(num2-num1));/span>br>span classline> return n;/span>br>span classline> }/span>br>span classline>/span>br>span classline> public static char getRandomChar(char ch1,char ch2)/span>br>span classline> {/span>br>span classline> char ch(char) (ch1+ Math.random()*(ch2-ch1+1));/span>br>span classline> return ch;/span>br>span classline> }/span>br>span classline>/span>br>span classline> public static void main(String args)/span>br>span classline> {/span>br>span classline> System.out.println(MathRandom.getRandomInt(1,7)); //产生的随机数包括1,不包括7/span>br>span classline> System.out.println(MathRandom.getRandomChar('a','b'));//a和b都包括/span>br>span classline> }/span>br>span classline>}/span>br>span classline>运行结果:/span>br>span classline>5/span>br>span classline>b/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>Random类/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>span classline>7/span>br>span classline>8/span>br>span classline>9/span>br>span classline>10/span>br>span classline>11/span>br>span classline>12/span>br>span classline>13/span>br>span classline>14/span>br>/pre>/td>td classcode>pre>span classline>import java.util.Random;/span>br>span classline>/span>br>span classline>public class randomTest {/span>br>span classline> public static void main(String args)/span>br>span classline> {/span>br>span classline> Random randomnew Random();//以系统当前时间作为随机数生成的种子/span>br>span classline> System.out.println(random.nextInt(10));//返回一个大于0且小于10的整数/span>br>span classline> System.out.println(random.nextFloat()); //返回一个随机浮点型/span>br>span classline> System.out.println(random.nextBoolean()); //返回一个随机布尔型值/span>br>span classline> System.out.println(random.nextDouble()); //返回一个随机双精度型/span>br>span classline> System.out.println(random.nextLong()); //返回一个随机长整形/span>br>span classline>/span>br>span classline> }/span>br>span classline>}/span>br>/pre>/td>/tr>/table>/figure>/li>/ol>h2 id输入流>a href#输入流 classheaderlink title输入流>/a>输入流/h2>ol>li>标准输入figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>/pre>/td>td classcode>pre>span classline>Scanner in new Scanner(System.in);/span>br>span classline>in.nextLine(); 可以从命令行读取一行字符串/span>br>span classline>in.nextInt();可以从命令行读取一个正整数/span>br>span classline>/span>br>span classline>readInt()从键盘读入数据/span>br>/pre>/td>/tr>/table>/figure>/li>/ol>h2 id数组>a href#数组 classheaderlink title数组>/a>数组/h2>ol>li>数组特点相同类型的变量集合、数据包含的元素个数最多是int的最大值、元素都有固定的顺序、每个元素都有固定的编号(索引index)可以像操作变量一样读写数组中的任何一个元素/li>li>数组是一块地址连续的内存,数组的名,就是这个块连续内存的第一个内存的地址。数组变量的地址是数组第一个元素的地址,索引数组索引是从0开始的/li>li>对于非基本类型的变量,都要通过两级跳的方式来访问。基本类型变量,一级跳就可以/li>/ol> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/01/10/软件测试7——后端性能测试/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/01/10/软件测试7——后端性能测试/ itempropurl>软件测试7——后端性能测试/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-01-10T18:04:52+08:00> 2020-01-10 /time> /span> /div> /header> div classpost-body itemproparticleBody> h2 id测试学习——后端性能测试>a href#测试学习——后端性能测试 classheaderlink title测试学习——后端性能测试>/a>测试学习——后端性能测试/h2>p>不管是什么类型的性能测试方法,都需要去模拟大量并发用户的同时执行,性能测试基本都是靠工具实现。没有工具,性能测试将寸步难行。/p>h3 id后端性能测试和后端性能测试工具之间的关系是什么?>a href#后端性能测试和后端性能测试工具之间的关系是什么? classheaderlink title后端性能测试和后端性能测试工具之间的关系是什么?>/a>后端性能测试和后端性能测试工具之间的关系是什么?/h3>p>后端性能测试工具是实现后端性能测试的技术手段。完整的后端性能测试包括性能需求获取、性能场景设计、性能测试脚本开发、性能场景实现、性能测试执行、性能结果报告分析、性能优化和再验证。后端性能测试工具主要在性能测试脚本开发、性能场景实现、性能测试执行这三个步骤中发挥作用,而其他环节都要依靠性能测试工程师的专业知识完成。把性能测试对应到整个看病的过程:figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>/pre>/td>td classcode>pre>span classline>需求获取对应的是你向医生描述身体不适细节的过程,医生需要知道要帮你解决什么问题;/span>br>span classline>设计性能场景对应的是医生决定需要检查哪些血液指标的过程;/span>br>span classline>使用性能测试工具对应的是使用医疗仪器分析血样的过程 ;/span>br>span classline>性能测试报告对应的就是验血报告 ;/span>br>span classline>性能测试人员分析性能结果报告的过程,对应的是医生解读验血报告的过程;/span>br>span classline>性能测试人员根据性能报告进行性能优化的过程,对应的是医生根据验血报告判断你的病情,并给出相应治疗措施的过程。/span>br>/pre>/td>/tr>/table>/figure>/p>p>使用性能测试工具获得性能测试报告只是性能测试过程中的一个必要步骤而已,而得出报告的目的是让性能测试工程师去做进一步的分析,以得出最终结论,并给出性能优化的措施。/p>h3 id后端性能测试工具和-GUI-自动化测试工具最大的区别是什么?>a href#后端性能测试工具和-GUI-自动化测试工具最大的区别是什么? classheaderlink title后端性能测试工具和 GUI 自动化测试工具最大的区别是什么?>/a>后端性能测试工具和 GUI 自动化测试工具最大的区别是什么?/h3>p>虽然后端性能测试工具和 GUI 自动化测试工具都是通过自动化的手段模拟终端用户使用系统的行为,但是两者实现的原理截然不同。第一个显著区别是,模拟用户行为的方式。GUI 自动化测试工具模拟的是用户的界面操作,因此测试脚本记录的是用户在界面上对控件的操作;而性能测试工具模拟的是用户的客户端与服务器之间的通信协议和数据,这些通信协议和数据往往是用户在界面上执行 GUI 操作时产生的。所以,再录制虚拟用户性能测试脚本时,我们需要先选定录制协议。由于脚本的模拟是基于协议的,我们才能比较方便地模拟成千上万并发用户同时使用系统的场景;否则,如果性能测试基于 GUI 发起,那我们就需要成千上万的浏览器同时执行用例,而这显然是不可能的。第二个显著的区别是,测试的执行方式。GUI 自动化测试的执行,一般是单用户执行并验证功能结果;而性能测试的执行,往往需要同时模拟大量的并发用户,不仅需要验证业务功能是否成功完成,还要收集各种性能监控指标,会涉及到压力产生器、并发用户调度控制、实时监控收集等内容,所以性能测试的执行控制要比 GUI 自动化测试复杂得多。/p>h3 id后端性能测试工具的原理是什么?>a href#后端性能测试工具的原理是什么? classheaderlink title后端性能测试工具的原理是什么?>/a>后端性能测试工具的原理是什么?/h3>p>首先,后端性能测试工具会基于客户端与服务器端的通信协议,构建模拟业务操作的虚拟用户脚本。对于目前主流的 Web 应用,通常是基于 HTTP/HTTPS 协议;对于 Web Service 应用,是基于 Web Service 协议;现在有些后端性能测试工具也可以直接检测协议的种类。我们把这些基于协议模拟用户行为的脚本称为font color#dd0000>虚拟用户脚本/font>br>,而把开发和产生这些脚本的工具称为font color#dd0000>虚拟用户脚本生成器/font>br>。不同后端性能测试工具的虚拟用户脚本生成器,在使用上的区别比较大:比如,LoadRunner 是通过录制后再修改的方式生成虚拟用户脚本;而 JMeter 主要是通过添加各种组件,然后对组件进行配置的方式生成虚拟用户脚本。LoadRunner 也支持采用直接开发的方式产生虚拟用户脚本,但是因为开发难度太大,所以基本上都是采用先录制再开发的方式,不会直接去开发。JMeter 也支持录制,但是 JMeter 的录制功能是通过设置代理完成的,而且录制出来的脚本都是原始的 http 请求,并没有经过适当的封装,所以录制功能比较弱。虽然不同工具的使用方式各有特色,但其本质上都是通过协议模拟用户的行为。然后,开发完成了虚拟用户脚本之后,后端性能测试工具会以多线程或多进程的方式并发执行虚拟用户脚本,来模拟大量并发用户的同时访问,从而对服务器施加测试负载。其中,我们把实际发起测试负载的机器称为压力产生器。受限于 CPU、内存,以及网络带宽等硬件资源,一台压力产生器能够承载的虚拟用户数量是有限的,当需要发起的并发用户数量超过了单台压力产生器能够提供的极限时,就需要引入多台压力产生器合作发起需要的测试负载。一旦有了多台压力产生器,那就需要一个专门的控制器来统一管理与协调这些压力产生器,我们把这个专门的控制器称为压力控制器。压力控制器会根据性能测试场景的设计,来控制和协调多台压力产生器上的多线程或多进程执行的虚拟用户脚本,最终模拟出性能测试场景中的测试负载。接着,在施加测试负载的整个过程中,后端性能测试工具除了需要监控和收集被测系统的各种性能数据以外,还需要监控被测系统各个服务器的各种软硬件资源。比如,后端性能测试工具需要监控应用服务器、数据库服务器、消息队列服务器、缓存服务器等各种资源的占用率。我们通常把完成监控和数据收集的模块称为系统监控器。在性能测试执行过程中,系统监控器的数据显示界面是性能测试工程师最密切关注的部分,性能测试工程师会根据实时的数据显示来判断测试负载情况下的系统健康状况。不同的后端测试工具中,系统监控器能力差别也比较大。比如,LoadRunner 的系统监控器就很强大,支持收集各种操作系统的系统参数,还支持与 SiteScope 等第三方专业监控工具的无缝集成。最后,测试执行完成后,后端性能测试工具会将系统监控器收集的所有信息汇总为完整测试报告,后端性能测试工具通常能够基于该报告生成各类指标的各种图表,还能将多个指标关联在一起进行综合分析来找出各个指标之间的关联性。我们把完成这部分工作的模块称为测试结果分析器。需要强调的是,测试结果分析器只是按需提供多种不同维度和表现形式的数据展现工作,而对数据的分析工作,还是要依赖于具有丰富经验的性能测试工程师。后端性能测试场景设计是什么意思,具体会涉及哪些内容?性能测试场景设计,是后端性能测试中的重要概念,也是压力控制器发起测试负载的依据。性能测试场景设计,目的是要描述性能测试过程中所有与测试负载以及监控相关的内容。通常来讲,性能测试场景设计主要会涉及以下部分:并发用户数是多少?测试刚开始时,以什么样的速率来添加并发用户?比如,每秒增加 5 个并发用户。达到最大并发用户数后持续多长时间?测试结束时,以什么样的速率来减少并发用户?比如,每秒减少 5 个并发用户。需要包含哪些业务操作,各个业务操作的占比是多少?比如,10% 的用户在做登录操作,70% 的用户在做查询操作,其他 20% 的用户在做订单操作。一轮虚拟用户脚本执行结束后,需要等待多长时间开始下一次执行?同一虚拟用户脚本中,各个操作之间的等待时间是多少?需要监控哪些被测服务器的哪些指标?脚本出错时的处理方式是什么?比如,错误率达到 10% 时,自动停止该脚本。需要使用多少台压力产生器?/p>h3 id业内主流的后端性能测试工具有哪些?>a href#业内主流的后端性能测试工具有哪些? classheaderlink title业内主流的后端性能测试工具有哪些?>/a>业内主流的后端性能测试工具有哪些?/h3>p>目前,业内有很多成熟的后端性能测试工具,比如传统的 LoadRunner、JMeter、NeoLoad 等。另外,现在还有很多云端部署的后端性能测试工具或平台,比如 CloudTest、Loadstorm、阿里的 PTS 等。其中,最为常用的商业工具是 HP 软件(现在已经被 Micro Focus 收购)的 LoadRunner,由于其强大的功能和广泛的协议支持,几乎已经成了性能测试工具的代名词。大量的传统软件企业,也基本都使用 LoadRunner 实施性能测试,所以我在后面分享企业级服务器端性能测试的实践时,也是以 LoadRunner 为基础展开的。另外,JMeter 是目前开源领域最主流的性能测试工具。JMeter 的功能非常灵活,能够支持 HTTP、FTP、数据库的性能测试,也能够充当 HTTP 代理来录制浏览器的 HTTP 请求,还可以根据 Apache 等 Web 服务器的日志文件回放 HTTP 流量,还可以通过扩展支持海量的并发。然后,再加上 JMeter 开源免费的特点,已经被很多互联网企业广泛应用。比如,饿了么就是使用 JMeter 来完成系统的全链路压力测试。其实,传统软件企业偏向于使用 LoadRunner,而互联网企业普遍采用 JMeter,是有原因的。LoadRunner License 是按照并发用户数收费的,并发用户数越高收费也越贵,但是 LoadRunner 的脚本开发功能、执行控制、系统监控以及报告功能都非常强大,易学易用。而传统软件企业,需要测试的并发用户数并不会太高,通常是在几百到十几万这个数量级,而且它们很在意软件的易用性和官方支持能力,所以往往热衷于直接选择成熟的商业工具 LoadRunner。但是,互联网企业的并发用户请求数量很高,很多软件都会达到百万,甚至是千万的级别。那么,如果使用 LoadRunner 的话:费用会高的离谱;LoadRunner 对海量并发的测试支持并不太好;很多互联网企业还会有特定的工具需求,这些特定的需求很难在 LoadRunner 中实现,而在开源的 JMeter 中,用户完全可以根据需求进行扩展。所以互联网企业往往选用 JMeter 方案,而且通常会自己维护扩展版本。/p>h3 id总结>a href#总结 classheaderlink title总结>/a>总结/h3>p>使用性能测试工具获得性能测试报告,只是性能测试过程中的一个必要步骤而已,而得出报告的目的是让性能测试工程师去分析并给出性能优化的措施。后端性能测试工具和 GUI 自动化测试工具最大的区别,即它们模拟用户行为的方式以及测试的执行方式不同。后端性能测试工具的基本原理。它首先通过虚拟用户脚本生成器生成虚拟用户脚本;然后根据性能测试场景设计的要求,通过压力控制器控制协调各个压力产生器以并发的方式执行虚拟用户脚本;同时,在测试执行过程中,通过系统监控器收集各种性能指标以及系统资源占用率;最后,通过测试结果分析器展示测试结果数据。/p>hr>p>极客时间版权所有: a hrefhttps://time.geekbang.org/column/article/10275 target_blank relnoopener>https://time.geekbang.org/column/article/10275/a>/p> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2020/01/09/2019总结,2020规划/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2020/01/09/2019总结,2020规划/ itempropurl>2019总结,2020规划--学习至上/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2020-01-09T18:10:10+08:00> 2020-01-09 /time> /span> /div> /header> div classpost-body itemproparticleBody> h3 id回首2019>a href#回首2019 classheaderlink title回首2019>/a>回首2019/h3>p>2019年,过的好快,真的是弹指一瞬间,这一年,立了很多flag,在年终的时候,也不敢去想年初的目标,毕竟有很多没有实现!!!第一个就是考研,和高中好友相约一起考在职研,买了一堆书,过年还在胖腾家里读英语,看专业课资料,但是热度也仅局限于假期几天。说是工作忙,其实还是自己懒惰。10月报名的时候,纠结了半天也没报名,不想死的太惨。/p>p> 1月,元旦在平遥举行了典礼,见了很多几年未见的亲朋好友,感谢,至此结婚仪式流程全部走完,开始踏实过小日子了。公司绩效考核还算满意,给2018划上圆满句号。/p>p> 2月,过完新年,休婚假,开启马尔代夫+迪拜蜜月游,花掉5w大洋,有点心疼,不过还是觉得很值。立下2019攒钱规划,攒够多少钱,还多少贷款。开心的是2019攒钱的目标顺利完成,年中收湖居房子的时候也按照预期,把中南贷款还了一部分。/p>p> 3月,平平常常,没有学习什么新知识。每个月都会想起来,要学习,要更新博客,但是只是想了想,都没有坚持下来。/p>p> 4月,只是简单生活,自驾去昌平摘草莓,去百里画廊和温都水城欣赏风景,兜兜转转去了解北京,努力想让日子丰富一些。/p>p> 5月,劳动节放假4天,去了上海。和胖腾姐姐姐夫团聚,去旅行的同时,开始想着去逛博物馆,了解历史,这点得感谢胖腾,让我们的旅行更有意义/p>p> 6月,嘟嘟小外甥出生了,家里喜添新成员。我也开始去北医三院看牙,把门牙做了处理,花了1w多,但是感觉还是很值,起码可以当众笑了。遗憾的事情,是因为治疗牙齿吃止疼药错过了更重要的东西,但是我相信还会有的,可能到那个时候,我也才会有足够的勇气去迎接。6月底去西安收房,自己名下的房子还是不一样的感觉,顺便带妈妈去体检。/p>p> 7月,回了趟平遥,见爸妈,参加康哥帅帅婚礼,看了又见平遥。年中了,我都没有仔细思考我工作中的学习和需要进步的地方,现在想起来真是惭愧。/p>p> 8月,赴闺蜜之约,杭州游。虽然许久未见,再次相见仍感亲切。/p>p> 9月,领证一周年,去了阿那亚,离北京很近,以后有机会可以常去,很让人放松的地方。中秋节自驾去了大同,顺便参观了云冈石窟,爬了恒山悬空寺,古人的智慧让人佩服。/p>p> 10月,国庆回韩城,去西安办理了湖居手续,开始想着换租的地方,想过自己的小日子,不想再合租了。国庆后,胖腾换了工作,比之前更忙碌了,但是待遇高了,而且离家近了。整体还是为胖腾开心。/p>p> 11月,房子定下来了,一月7300,但是住的真的舒心,生活品质上升了好几个台阶,感觉钱花的真值,而且和胖腾达成一致,要想怎么赚钱,而不是怎么省钱。这个月过了25周岁生日,拍了古装写真送给自己,还是很开心的。给妈妈买的保险,到期后继续续约。工作上,服务端测试缺人,紧急拉过去支持了一把,学了很多知识,压力也比平时大好多,同时也意识到自己专业能力的缺陷,进步空间还是很大的。/p>p> 12月,这个月在生活技能上有了显著进步,在同事的指导下,开始学做饭,自己可以做点小菜,琢磨怎么去做好吃的饭了。公司年会,什么奖品也没抽到,和胖腾一个运气。一到年底,就又开始懊恼了,懊恼自己怎么没有多学一些专业知识,每天在业务中奔波,所以在迈入2020年后,我一定要好好规划自己的学习、生活计划。/p>p>2019年,有满足也有不足,有喜悦也有悲伤,已经过去的时光都会留存在记忆中。最幸福的事情是金钱方面没有怎么操心,有条不紊的进行。最正常的事情,是享受生活,什么时候都不会忘记,所以这点不必担心。最失望的事情是,工作中的挑战和专业知识的充电,意识到不足,继续加油吧!继续向未知的方向,发起挑战,加油喽!!/p>h3 id2020规划>a href#2020规划 classheaderlink title2020规划>/a>2020规划/h3>p> 2020如约而至,来的太快,没空感叹,只想着抓紧把目标定下来,开启新一年计划。/p>ul>li>p>专业和工作/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>/pre>/td>td classcode>pre>span classline>1,学习测试专栏,每天两节课/span>br>span classline>2,学习java,每天两节课/span>br>span classline>3,学习hive+sql,定期总结文档/span>br>span classline>4,保持博客每周都有更新/span>br>/pre>/td>/tr>/table>/figure>/li>li>p>生活/p>figure classhighlight plain>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>/pre>/td>td classcode>pre>span classline>1,定期攒钱,还完中南贷款/span>br>span classline>2,旅行,出一次国,国内有假期就出去玩。/span>br>span classline>3,坚持做饭,学习做饭,做几道拿手菜/span>br>span classline>4,保持对生活的热爱/span>br>span classline>5,随时准备着,应对生活的突然事件。/span>br>/pre>/td>/tr>/table>/figure>/li>/ul> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> article classpost post-type-normal itemscope itemtypehttp://schema.org/Article> div classpost-block> link itempropmainEntityOfPage hrefhttp://yoursite.com/2019/06/17/python闭包/> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropname contentKingvirre> meta itempropdescription content> meta itempropimage content/images/blog-logo.jpg> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentKingvirre> /span> header classpost-header> h1 classpost-title itempropname headline> a classpost-title-link href/2019/06/17/python闭包/ itempropurl>python闭包/a>/h1> div classpost-meta> span classpost-time> span classpost-meta-item-icon> i classfa fa-calendar-o>/i> /span> span classpost-meta-item-text>Posted on/span> time titlePost created itempropdateCreated datePublished datetime2019-06-17T20:17:59+08:00> 2019-06-17 /time> /span> /div> /header> div classpost-body itemproparticleBody> h2 idpython-闭包>a href#python-闭包 classheaderlink titlepython 闭包>/a>python 闭包/h2>p>### /p> /div> footer classpost-footer> div classpost-eof>/div> /footer> /div> /article> /section> nav classpagination> span classpage-number current>1/span>a classpage-number href/page/2/>2/a>span classspace>…/span>a classpage-number href/page/4/>4/a>a classextend next relnext href/page/2/>i classfa fa-angle-right>/i>/a> /nav> /div> /div> div classsidebar-toggle> div classsidebar-toggle-line-wrap> span classsidebar-toggle-line sidebar-toggle-line-first>/span> span classsidebar-toggle-line sidebar-toggle-line-middle>/span> span classsidebar-toggle-line sidebar-toggle-line-last>/span> /div> /div> aside idsidebar classsidebar> div classsidebar-inner> section classsite-overview-wrap sidebar-panel sidebar-panel-active> div classsite-overview> div classsite-author motion-element itempropauthor itemscope itemtypehttp://schema.org/Person> img classsite-author-image itempropimage src/images/blog-logo.jpg altKingvirre /> p classsite-author-name itempropname>Kingvirre/p> p classsite-description motion-element itempropdescription>/p> /div> nav classsite-state motion-element> div classsite-state-item site-state-posts> a href/archives/> span classsite-state-item-count>35/span> span classsite-state-item-name>posts/span> /a> /div> div classsite-state-item site-state-tags> a href/tags/index.html> span classsite-state-item-count>10/span> span classsite-state-item-name>tags/span> /a> /div> /nav> /div> /section> /div> /aside> /div> /main> footer idfooter classfooter> div classfooter-inner> script async srchttps://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js>/script>div classcopyright>© span itempropcopyrightYear>2021/span> span classwith-love> i classfa fa-user>/i> /span> span classauthor itempropcopyrightHolder>Kingvirre/span>/div> div classpowered-by> i classfa fa-user-md>/i> span idbusuanzi_container_site_uv> span idbusuanzi_value_site_uv>/span>/span> /div> div classtheme-info> 访客量 — /div> /div> /footer> div classback-to-top> i classfa fa-arrow-up>/i> /div> /div> script typetext/javascript> if (Object.prototype.toString.call(window.Promise) ! object Function) { window.Promise null; }/script> script typetext/javascript src/lib/jquery/index.js?v2.1.3>/script> script typetext/javascript src/lib/fastclick/lib/fastclick.min.js?v1.0.6>/script> script typetext/javascript src/lib/jquery_lazyload/jquery.lazyload.js?v1.9.7>/script> script typetext/javascript src/lib/velocity/velocity.min.js?v1.2.1>/script> script typetext/javascript src/lib/velocity/velocity.ui.min.js?v1.2.1>/script> script typetext/javascript src/lib/fancybox/source/jquery.fancybox.pack.js?v2.1.5>/script> script typetext/javascript src/js/src/utils.js?v5.1.4>/script> script typetext/javascript src/js/src/motion.js?v5.1.4>/script> script typetext/javascript src/js/src/affix.js?v5.1.4>/script> script typetext/javascript src/js/src/schemes/pisces.js?v5.1.4>/script> script typetext/javascript src/js/src/bootstrap.js?v5.1.4>/script> /body>/html>script typetext/javascript src/js/src/love.js>/script>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]