java后台开发的学习总结

在IDE上搭载Tomcat服务器

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是9.0。

首先你先到tomcat官网下载好Tomcat安装包 http://tomcat.apache.org/
在左边有Download,下载对应的版本

bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件
conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml
doc:存放Tomcat文档
server:包含三个子目录:classes、lib和webapps
server/lib:存放Tomcat服务器所需的各种JAR文件
server/webapps:存放Tomcat自带的两个WEB应用admin应用和 manager应用
common/lib:存放Tomcat服务器以及所有web应用都可以访问的jar文件
shared/lib:存放所有web应用都可以访问的jar文件(但是不能被Tomcat服务器访问)
logs:存放Tomcat执行时的日志文件
src:存放Tomcat的源代码
webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录
work:存放JSP编译后产生的[class文件]

搜狗截图17年08月05日0714_1.png

我们打开bin这个文件夹,打开里面的startup.bat
启动成功的话,就是准备好了
这个也算是启动Tomcat的一种方式,但是我们使用的是MyEclipse,不可能每一次都找到Tomcat目录下的startup.bat文件,来打开服务器,那样子效率不是特别的高

接下来就是在MyEclipse搭载服务器了

搜狗截图17年08月05日0724_2.png

然后打开Configure Server

搜狗截图17年08月05日0728_3.png

这样子就搭载好了,你会看见这里会有你搭载的Tomcat,然后就是在MyEclipse上启动Tomcat服务器了

搜狗截图17年08月05日0730_4.png

安装数据库

mysql是一个很好用的开源数据库,在项目中我们往往要进行数据的交换,Mysql如何安装呢MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的。如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C:\Program Files\MySQL\MySQL Server 5.6 该目录中;zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进行配置。
解压之后可以将该文件夹改名,放到合适的位置,个人建议把文件夹改名为MySQL Server 5.6,放到C:\Program Files\MySQL路径中。当然你也可以放到自己想放的任意位置。

搜狗截图17年08月19日1216_1.png

完成上述步骤之后,很多用户开始使用MySQL,但会出现图示的错误。这是因为没有配置环境变量所致。配置环境变量很简单:我的电脑->属性->高级->环境变量选择PATH,在其后面添加: 你的mysql bin文件夹的路径 (如:C:\Program Files\MySQL\MySQL Server 5.6\bin )PATH=.......;C:\Program Files\MySQL\MySQL Server 5.6\bin (注意是追加,不是覆盖)

搜狗截图17年08月19日1216_2.png
搜狗截图17年08月19日1216_3.png

配置完环境变量之后先别忙着启动mysql,我们还需要修改一下配置文件(如果没有配置,之后启动的时候就会出现图中的错误哦!:错误2 系统找不到文件),mysql-5.6.1X默认的配置文件是在C:\Program Files\MySQL\MySQL Server 5.6\my-default.ini,或者自己建立一个my.ini文件,在其中修改或添加配置(如图):[mysqld]basedir=C:\Program Files\MySQL\MySQL Server 5.6(mysql所在目录)datadir=C:\Program Files\MySQL\MySQL Server 5.6\data (mysql所在目录\data)

搜狗截图17年08月19日1217_4.png
搜狗截图17年08月19日1217_5.png
搜狗截图17年08月19日1217_6.png

以管理员身份运行cmd(一定要用管理员身份运行,不然权限不够),输入:cd C:\Program Files\MySQL\MySQL Server 5.6\bin 进入mysql的bin文件夹(不管有没有配置过环境变量,也要进入bin文件夹,否则之后启动服务仍然会报错误2)输入mysqld -install(如果不用管理员身份运行,将会因为权限不够而出现错误:Install/Remove of the Service Denied!)安装成功

搜狗截图17年08月19日1217_8.png

安装成功后就要启动服务了,继续在cmd中输入:net start mysql(如图),服务启动成功!此时很多人会出现错误,请看注意:注意:这个时候经常会出现错误2和错误1067。如果出现“错误2 系统找不到文件”,检查一下是否修改过配置文件或者是否进入在bin目录下操作,如果配置文件修改正确并且进入了bin文件夹,需要先删除mysql(输入 mysqld -remove)再重新安装(输入 mysqld -install);如果出现错误1067,那就是配置文件修改错误,确认一下配置文件是否正确。

搜狗截图17年08月19日1217_9.png

服务启动成功之后,就可以登录了,如图,输入mysql -u root -p(第一次登录没有密码,直接按回车过),登录成功!

搜狗截图17年08月19日1217_10.png

对Mybatis的认识

MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
MyBatis的前身是ibatis,但是在配置sql的语法上有明显的区别,并且spring目前的版本封装mybatis,至于mybatis-spring.jar文件也是mybatis团队复杂开发的jar包,用于和spring整合。之前ibatis的源码托管方是apache,而mybatis是google。
mybatis的结构主要分三层1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
null(2)数据处理层[1]:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。
它主要的目的是根据调用的请求完成一次数据库操作。

(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西
将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
首先明白Mybatis的构建,它和JDBC最大的差别就是能够实现半自动化,它的sql语句由很大的灵活性,能实现数据库的数据交互。对于刚入门的新手比较好学习。
1.首先先导入mybatis-3.3.1.jar和mysql-connector-java-5.1.18-bin.jar两个jar包。通过SqlSession语句来获取数据库信息,通过配置文件来构建SqlSessionFactory,之后再通过SqlSessionFactory打开一个数据库会话。

'public SqlSession getSqlSession() throws IOException'
{
//通过配置文件来获取数据库信息
Reader reader=Resources.getResourceAsReader("Mybatis/config/Configuration.xml");
//通过配置文件来构建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//通过SqlSessionFactory打开一个数据库会话
SqlSession sqlSession=sqlSessionFactory.openSession();
return sqlSession;
}

2.配置好xml文件,Configuration.xml文件是实现MyEclipse和mysql数据库的数据交互
里面填写你的数据库类型,还有连接的数据库名字,连接好你的数据库驱动,然后还有你的用户名和密码

3.MyEclipse建立与数据库表与之相对应的Bean

4.然后就是配置与数据库表相对应的xml文件,我们与MyEclipse工具之间,实现数据交互也是通过里面的sql语句。(查看mysql数据库的程序是Navicat for MySQL)
你要对哪个数据库里面的多少张表进行操作,就建立与之相对应的多少个xml文件.

接下来是关于配置xml文件的一些标签作用

<mapper namespace="mybatis.servce.IStudent">

  <resultMap type="mybatis.bean.Student" id="Student">
   <!-- 拥有主键的话就用ID标签 -->
    <id column="ID" jdbcType="INTEGER" property="id"/> 
    <result column="NAME" jdbcType="VARCHAR" property="name"/>
  </resultMap>
  </mapper>

namespace:xml文件的唯一的名字
type:你数据库表对应的bean的位置
column:数据库列的名字,也就是上面的ID(可能会改变)
jdbcType:列的属性,数据库里是int,这里用Integer
property:对应你bean层的属性名字

接下来是xml里面对应的sql语句

   <select id="queryStudentList"  parameterType="mybatis.bean.Student" resultMap="Student">
    select s.ID S_ID,s.NAME,t.ID,t.TEACHER,t.STUDENT_ID,g.ID,g.MATH,g.ENGLISH,g.CHCHINESE from Student s left join (Teacher t,Grade g)
    on s.ID=t.STUDENT_ID and s.ID=g.STUDENT_ID  where
    <if test="name !=null and !"".equals(name.trim())"> s.NAME=#{name}</if>
  </select>

先说明一下在配置xml中有几种标签与sql语句很相似

  • select
  • delete
  • update
  • insert
    它们在这里是标签,你使用哪种sql语句,就使用哪一个标签,否则会出现错误
    id:按我的话说就是方法名字,在这个XML文件中要唯一
    parameterType:从外面传回来的数据类型(只能有一个数据类型)
    resultMap:返回的数据类型
    中间则是sql语句

collection标签:
一对多的意思就是,一条信息对于其他多条信息,比如一个学生被多个老师教过
association标签:
一对一:一条信息对一条信息,比如人和身份证
多对一:多条信息对一条信息,各科学习成绩和学生
!!!注意:千万要把这两个标签区分看来,你的bean层也需要把各个信息都分开来
如果你出现一些空指针的错误,不妨在那里找找原因

搜狗截图17年07月17日2245_2.png

Spring框架

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
在这篇由三部分组成的 Spring 系列 的第 1 部分中,我将介绍 Spring 框架。我先从框架底层模型的角度描述该框架的功能,然后将讨论两个最有趣的模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。接着将使用几个示例演示 IOC 容器在典型应用程序用例场景中的应用情况。这些示例还将成为本系列后面部分进行的展开式讨论的基础,在本文的后面部分,将介绍 Spring 框架通过 Spring AOP 实现 AOP 构造的方式。

在Myeclipse 10上添加Spring框架

spring配置.png

选择默认的就行

spring配置2.png

然后就得到一个applicationContext.xml


spring.png

这里先简单的写一个Hello world

先建一个bean

helloworld.png

配置applicationContext.xml

spring1.png

创建spring的ioc容器对象

ClassPathXmlApplicationContext是ApplicationContext的实现类,从类路径来加载配置文件
注意:千万不要导错类

搜狗截图17年07月19日1958_3.png
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");

然后从IOC容器中获取bean实例

利用id来定位IOC容器中的bean

//helloworld是你的applicationContext.xml得id值
HelloWorld helloworld=(HelloWorld) ctx.getBean("helloworld")
//调用bean的方法
helloworld.hello("spring123456")

接下来讲的是另一种注入属性值的方式

spring2.png
spring3.png

Json与Gson

JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成。JSON简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构,其可以将JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。

Json有两种数据结构:数组和对象

对象:是指用{}中间的内容,其形式为{key:value,key1:value1,key2:value2}

k#ey为对象的属性,而value为对象的属性值,通过对应的key值来取出对应的value值

数组:是指用[]中间的内容,其形式为["java","javascript",servlet],跟java,c,c++等语言一样的数组
可以通过下标,索引来取出对应的值

下面介绍Json与Gson的使用方法
首先我们先导入我们所需的包: (http://pan.baidu.com/s/1eSJ4mBK) 密码:6j47

搜狗截图17年07月27日0929_1.png

**Json的值也就是上面所说的value值,它有几种类型,数字(包括整形和浮点型),字符串,逻辑值,数组,对象,null,它们可以直接使用,对应相应的key **

直接使用JSONObject对象

    /**
     * 直接使用JSONObject对象
     */
    private static void JSONObject()
    {
        Object nullObj=null;
        //创建一个JSONObject对象
        JSONObject jsonObject=new JSONObject();  //很类似于Map<String,Object>,后面讲到
        jsonObject.put("name","小明");
       //使用浮点型
        jsonObject.put("age",25.2);
      //json没有Data类型
        jsonObject.put("birthday","1990-10-01");
        jsonObject.put("school","蓝翔");
     //数组类型
        jsonObject.put("major",new String[]{"挖掘机"});
        jsonObject.put("house", nullObj);
        System.out.println(jsonObject);
    }

其结果为


搜狗截图17年07月27日0944_2.png

通过Map来使用json

    /**
     * 通过Map来使用json
     */
    private static void createJsonByMap()
    {
        //创建一个Map对象
        Map<String,Object> jsonObjectMap=new HashMap<String,Object>();
        jsonObjectMap.put("name","王小二");
        jsonObjectMap.put("age",25.2);
        jsonObjectMap.put("birthday","1990-10-01");
        jsonObjectMap.put("school","蓝翔");
        jsonObjectMap.put("major",new String[]{"理发","挖掘机"});
        jsonObjectMap.put("house", null);
        System.out.println(new JSONObject(jsonObjectMap));
    }
搜狗截图17年07月27日0946_3.png

下面推荐使用这种方法来使用json

/**
     * 这个是通过bean的形式来使用json
     */
    private static void createJsonByBean()
    {
        
        JSONObject jsonObject =new JSONObject();
        //定义一个bean
        Person person=new Person();
        //调用set方法
        person.setId("1");
        person.setName("王小二");
        person.setAge("18");
        person.setSex("男");
        //通过这个方法来使bean成为JSONObject对象
        JSONObject j1=jsonObject.fromObject(person);
        //判断是否为空
        if(!j1.isEmpty())
        {
            System.out.println(j1);
        }

    }

JSON也可以通过文件来读取里面的jSON数据

public static void main(String[] args) throws IOException
    {
    public static void main(String[] args) throws IOException 
      {
        //从文件中读取json数据
        File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
        String content=FileUtils.readFileToString(file);
        //解析成一个json对象
        JSONObject jsonObject=new JSONObject(content);
        //找到一个名为name的key
        System.out.println(jsonObject.getString("name"));
      }
    }

JSON到这里就结束了

接下来是介绍Gson的使用:(Gson可以将下面四种数据类型转换成json字符串)

类型一:JavaBean

类型二:List<JavaBean>

类型三:List<String>

类型四:List<Map<String,Object>>

private static void createGSON()
    {
        /**
         * List<javabean>对象转换json字符串
         * 将json字符串解析成List<javabean>对象
         */
        //创建一个bean对象
        Person person=new Person();
        person.setId("1");  
        person.setName("王小二");
        person.setAge("18");
        person.setSex("男");
        person.setMajor(new String[]{"理发","挖掘机"});
        //创建一个Gson
        Gson gson=new Gson();
        //将一个javabean转换成json字符串
        String jsonString=gson.toJson(person);
        System.out.println("Json字符串:"+jsonString);
        //将json字符串转换成javabean
        person=gson.fromJson(jsonString, Person.class);
        System.out.println("bean:"+person.toString());
        System.out.println();
        
        /**
         * List<String>对象转换json字符串
         * 将json字符串解析成List<String>对象
         */
        List<String> list=new ArrayList<String>();
        list.add("gson1");
        list.add("json2");
        list.add("json3");
        //将List<String>对象转换成json字符串
        jsonString=gson.toJson(list);
        System.out.println("Json字符串:"+jsonString);
        //将json字符串转换成List<String>
        List<String> list2=gson.fromJson(jsonString,list.getClass());
        System.out.println("List<String>:"+list);
        System.out.println();

        /**
         * 将List<Map<String,Object>>对象转换成json
         * 将json字符串解析成List<Map<String,Object>对象
         */
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        //将Map<String,Object>对象转换成json字符串
        jsonString=gson.toJson(map);
        System.out.println("Json字符串:"+jsonString);
        //将json字符串转换成Map<String,Object>
        Map<String,Object> map2=gson.fromJson(jsonString,map.getClass());
        System.out.println("List<Map<String,Object>:"+map2);
    }
搜狗截图17年07月27日1007_4.png

Gson也能读取JSON文件下的json字符串

public static void main(String[] args) throws IOException
    {
        //从文件中读取json数据
        File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
        String content=FileUtils.readFileToString(file);
        Gson gson=new Gson();
        //JSON只能解析成它自己的Oject对象
        //GSON能解析成自己的Oject对象
        //正向生成的对象与反向解析的对象是一样的话,可以确保两个对象是一致的
        Person person=gson.fromJson(content,Person.class);
        System.out.println(person.toString());
    }

最后的总结

在这一次夏令营中,我接触到了许多的东西和许多的技术,这些是我平时学习所无法接触到的,这一次活动,我深刻的体会到互联网给人们带来的便利和挑战。互联网它让人们的生活变的更加方便,无论在哪个领域都有充斥的互联网所带来的效益,同时它也给人们带来了许多巨大的挑战,正如腾讯CEO,马化腾所说,掌声越热烈,竞争越残酷。无论是千亿级的企业还是百亿级的,如果没有危机意识,那么就有可能一瞬间都会化为乌有.

timg.jpg

而我们大学生也应该具有这种危机意识,正如上两周学长所说,你们现在所学的技术,到企业中不一定会用上,可能会一点都用不上,所以你们在大学三年期间,要多接触技术,无论是搞前端开发的,还是弄后台开发的,两者都会一点。明白它们是如何实现交互的,总而言之就是多多学习。

这三周来的学习,我懂得了,如何运用mybatis来实现与mysql数据库的交互,mybatis是通过编写xml文件来关联上数据库对应的每一张表,编写好每张表的xml文件,然后在总表configuration.xml中进行关联。基本掌握它的应用方法,要是更深层次的东西,比如源码之类的,我就还是一头雾水。然后接下来就是mybatis与spring的结合,spring和mybatis都是框架,
spring只是把mybatis的DB层给替换了(不知道是不是还可以替换其他的)。以上两者我只能运用,然后更深层次的东西,例如上面所说的源码,它们是通过动态代理和反射,来实现与数据库的交互。
然后是实现与android前端传值,在学习过程中,了解到与android前端传值,需要JSON语句,而我又加紧时间来学习json,了解到json的好处,语法,排列规则,基本类型等,然后终于能基本运用json,其实我们一直进入一个误区,当初我们认为服务器后台与android前端是不能够像网页那样直接传输数据,应该是使用一些特殊的方式来实现数据的交互。最后当我们发现,其实只能把后台要传输到android前端的数据,转换成json的语法,然后使用PrintWriter的write语句就能直接把后台的值传到android前端。在7月26号,我们首次尝试着与android前端进行数据交换(简单的数据交互),其中我们也遇到许多的困难,我们后台一直接收不到前端传过来的数据,这让我们又一次怀疑自己,是不是自己的后台又炸了。我们又再一次的仔细的检查自己的后台程序,然后android前端让学长操作了一番,之后终于成功了!!!!android前端与后台终于能进行数据交互了。我们几个终于犹如一个小的团队进行的开发工作,在最后进行前端与后台终于能结合,看着自己的程序能在别人的电脑上跑起来,我们激动不已,欣喜若狂。这可能就是程序的魅力吧

1.jpg

在夏令营活动的时候,我应该是第一次给别人讲解我所学的东西,可能是第一次有些紧张,再加上我学习的程度并不深,只能照着ppt和文章里说,不能完全拓展开来,想不出其他多专业词汇。
通过这一次我也明白了给别人讲解,首先要有扎实的基础,这样子才能在这个点拓展开别人的知识面,同时也使自己的基础知识更加的稳固。希望以后我能完全说明白要讲的东西,让别人也能够了解我所学的到底是什么东西。

2.jpg

总的来说,这应该是我至今的人生中第一次夏令营,在这次活动中,我学到了很多东西,学习到了如何懂得团队合作,懂得如何与他人分工合作,更重要的是通过这次活动,我更加会自主学习,会想尽办法去完成目标,会考虑如何的解决程序抛出的异常。这一切都是我至今为止都无法达到的高度。在今后的人生道路上我也能更上一层楼。


3.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,732评论 6 342
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,174评论 11 349
  • 有人说,饭后走一走能活九十九,其实这不全对。 我们一日三餐不能每次都运动,吃过早饭后,没必要运动,可适...
    超越风平浪静阅读 266评论 0 0
  • 我轻轻的招一招手, 作别西北天空, 白银的晨阳光辉, 在我心海里涌动。 波光里的艳影, 永远在心中荡漾。 看一眼西...
    暖风夕阳阅读 312评论 2 2