第十周学习总结

算法方面:1,通过做杭电oj的题目,学习了对于常见输入格式的读取操作和输出操作。

 

2,看书学习了堆排序的排序思想,并复习了快速排序和冒泡排序的手写。

堆排序思想:即以空间换时间,将所有的数据存入树内,先将树变为小顶堆(或大顶堆)然后将根(最小值)移到数组末尾并缩小树的范围,再将剩余的树变为小顶堆,循环往复,直到将所有元素移出树。

python方面:学习了python基础数据结构的使用操作,并随学校课程继续深入学习并理解python的基础操作。

 

爬虫方面:学习并总结了爬虫整体步骤,学习了爬虫的几种常见库的使用,并自己写出了一个普通的爬虫爬取信息(仅用于显示)。

爬虫是一种获取网络上数据的方法。
在网络上获取数据有两种方法:
1,浏览器提交请求--->下载网页代码--->解析成页面
2,模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中
爬虫使用的是方法二,具体步骤是:发起请求->获取相应内容->解析内容->保存数据
1,发起请求:使用http库向目标站点发起请求,即发送一个Request,请求方式有get,post等等,其中Request包含请求头和请求体,但是Request模块无法执行JS和CSS。
2,获取相应内容:请求发出后,若服务器正常响应,则可以获得一个Response,其中包括:html,json,图片,视频。
3,解析内容:解析html:解析为正则表达式(RE),或使用第三方解析工具。
             解析json:解析为json模块。
             解析二进制数据:以wb形式写入文件。
4,保存数据:将获取的数据存入数据库(MySQL,Redis等等)或存入文件。
其中每一步的常用工具为:
请求库:requests:较为方便,使用简单,安装方便,缺点是无法请求CSS和JS这些动态加载的信息。
        selenium:使用起来较为复杂,但是可以驱动浏览器解析渲染CSS和JS,但有性能劣势(有用没用的网页都会加载)。
解析库:re(使用正则表达式):使用方式直接简单,速度快效率高,但是逻辑较复杂,正则表达式使用较困难。
        beautifulsoup:无需使用正则表达式,但使用方式较复杂(参数较多)。
        (注:还可用lambda函数来作为re函数的参数,一般是用于筛选指定标签类型或个数的信息)
        pyquery:python独有,适合擅长前端的人使用。
存储库:文件,MySQL,Mongodb,Redis
附:python内置urllib库,可用于发送请求和解析(即该库包含请求库和解析库的功能)。

爬虫概念:一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
爬取的对象:浏览器通过解析前端页面代码生成我们所看到的页面,而爬虫要爬取的就是原始的前端页面代码。

java方面:复习了java基本类型和格式转化,并初步学习了JFrame的相关知识。

设计模式:深入学习了简单工厂模式,工厂方法模式和接口工厂模式。

1,工厂模式:
简介:使用工厂模式,可以将实例对象的创建从客户端代码中抽离出来,使客户避免接触核心代码,降低了耦合度。工厂模式中所有实例对象的创建将由工厂类负责(不同种类的工厂模式的工厂类写法也不同),客户端中用户将使用工厂类创建对象,在工厂模式中,工厂类用于提供给用户接口,原用于创建对象的类
(1)简单工厂模式:
工厂模式在不同条件下可以创建不同的实体,即实现多态。
代码:
public interface Shape {        //所有产品类的公共接口
   void draw();
}
public class Rectangle implements Shape {        //第一个产品类
 
   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}
public class Square implements Shape {            //第二个产品类
 
   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}
public class Circle implements Shape {            //第三个产品类
 
   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}
public class ShapeFactory {                        //工厂类(根据不同的参数创建不同的实例)
    
   //使用 getShape 方法获取形状类型的对象
   public Shape getShape(String shapeType){            //简单工厂模式中,工厂类只有一个,写法是让用户输入指定种类的参数,用switch-case语句来确定创建的对象(产品)实例
      if(shapeType == null){
         return null;
      }        
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();                        //工厂类创建产品时直接return new对象,而非继承,符合合成复用原则
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      return null;
   }
}
从以上代码中我们可以看出,工厂模式的实现步骤为:1,创建公共接口。2,创建各个实例类,均继承公共接口。3,创建工厂类,实现根据不同参数创建不同实例(多态)。
简单工厂模式优点:将公共接口,实例类,工厂类分开,提高了内聚,降低了耦合。
简单工厂模式缺点:当需要添加新产品时需要修改工厂类(违背开闭原则),代码灵活性差。

其他:学习了普通文字RPG游戏的构建方式及游戏剧本设计。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值