Java菜鸟学习日记35

MapReduce
  • MapReduce是一个解决复杂问题的思路。把解决1问题的过程拆分成两步:
  1. 映射:目的是将数据转换成目标类型
    1. 标签对象 —> 字符串对象
    2. 作用是转换或抽取数据
  2. 聚合:目的是将所有的数据聚合成一个数据
    • 好处是:将Map和Reduce分开,可以使Map和Reduce都更加简单
      • Map时只需考虑怎样抽取或转换数据即可
      • Reduce只需考虑怎样将上一步的计算结果和当前值计算在一起
      • 在集群运行环境中,Map和Reduce可以分散到N多电脑上同时进行。
JS中的MapReduce
  • [].map( x=>y ).reduce( (prev,current)=>A(prev,current),initValue )
    • 计算平方和:[1,2,3]
[1,2,3].map(x => x*x):[1,4,9]
.reduce( (prev,current) => (prev + current),0):14
0:为结果的初始值
URLEncoded格式
  • application/x-www-form-urlencoded
  • 形状:key1 = value1&key2 = value2&...
  • 生成这种格式:
    • $(form).serialize():收集表单数据,生成URLEncoded
    • 拼字符串
    • $.param(object):把JS对象变成URLEncoded
Ajax登录
可能会存在一种担心,就是Ajax登录成功时,网页是否也同时登录。
答案是:Ajax的Cookie和网页的Cookie是连通的,所以Ajax登录成功时,Cookie将会被正确地设置到网页中,网页也同时”登录成功”(虽然网页并没有刷新)
接口开发返回数据的统一模式
  • 通过code表示服务端处理是否成功,如果失败,则用各种数字表示不同的失败原因
  • 通过message表示失败的具体原因
  • 鉴于每一次请求都需要返回code和message,所以通常创建一个JSONResult类,在其中添加code和messag两个属性以统一作为Ajax或App接口得返回类型。
  • 因为成功的请求一定是占大多数的,所以在JSONResult上面还会有个static final的success属性,表示请求成功的结果,处理成功时直接返回JSONRestult.success
  • 如果要同时返回很多数据,则从JSONResult继承一个子类JSONDataResult,添加一个新属性:HashMap<String,Object> data 把需要返回的数据都put到data中即可
SpringMVC上传文件常见问题
  1. 创建了一个Bug模型,在Bug模型中定义了一个属性与文件上传input的name相同
    1. 网页上 <input type="file" name="image">
    2. 模型中 String image
    3. 会出现 400错误
    4. 解决方法:把input的name后属性的名字改成不一样的!
    5. 此时需单独添加一个参数:@RequestPart("image")、@RequestParam("image") MultipartFile image来接收上传的文件
  2. 不创建模型,在请求处理方法中 @RequestPart("desc") String desc。。。
    1. 解决的方法是只有MultipartFile类型的参数可以用@RequestPart
    2. 其他参数用@RequestParam即可解决问题
  3. 不用SpringMVC的机制,改为request.Part("desc").getInputStream()
    1. 会报Servlet上缺少MultipartConfig错误
    2. 解决办法:不要用该方法!
上传文件的分布问题
  • 用户上传的文件不能全部放到一个固定的文件夹中。
  • 用为随着用户量的增加及运行时长增长,该文件夹中的文件数量过多,导致系统IO性能降低并且该文件夹将很难维护
  • 解决方法,把用户上传的文件根据一个特定的方法分散到很多文件夹中,比如按上传日期分文件夹、按照商户ID分文件夹
开发过程中,上传的图片被删除的问题
  • Eclipse重启服务器Servers,或者删除Servers重新部署时,会导致应用被删除,应用内部的上传文件也会一并被删除
  • 解决方法:通过配置文件向应用指明,将上传的文件保存在应用之外的地方
  1. 用一台服务器上的其他磁盘
  2. 其他存储设备
  3. 其他服务器
  • 当把文件保存在应用之外时,如果希望通过应用内的URL访问这个文件,就需要创建虚拟目录:
    • 虚拟目录:应用内本来没有这个目录,但是Tomcat通过读取配置文件会把另外一个目录的内容当作是这个目录的内容。
      • <Host>
        • <Context>
    • 虚拟主机:在同一台硬件服务器上部署多个网站,这些网站可以使用不同的域名后端口。Tomcat通过分辨域名或端口号区分不同的请求,将之转发给不同的应用去处理。从而实现在一台硬件服务器上可以部署多个网站的效果。
      • <Connector>
      • <Host>
SpringMVC的对象池及Bean
  • 从对象池中获取Bean(对象):
  1. 使用注解@Autowired可以自动获取对象池中的对象
  2. 通过对象池(WebApplicationContext)的getBean()方法
  • 对象池:
    • 对象池是一个容器对象,对应的类型是各种ApplicationContext→底层是BeanFactor
  • 对象池与ServletContext之间的关系
    • ServletContext在jsp中有一个别名,叫application
    • ServletContext是Servlet的容器,内部管理的是Servlet对象(还可以通过addAttribute方法添加其他对象。但是仅仅是将这些对象放进去而已,并没有提供Spring自动获取对象的强大机制),而ApplicationContext是对象池,内部管理的是普通对象。
    • WebApplicationContext在ServletContext内部
    • WebApplicationContentUtils.findWebApplicationContext(ServletContext)可以获取ApplicationContext。
    • 之后可以通过getBean()方法获取对象池中的对象。
Bean对象的作用域(生存范围)
  • singleton:单例:整个应用声明周期中只创建一次
  • prototype:多例:每一次获取都创建一个新对象
  • 下面3个是Web特有的作用域
    • request:请求:每一次请求都可以创建一个新对象
    • session:用户会话:每一个JSESSIONID只创建一个新对象
    • globalSession:全局:一个应用只创建一次
在Bean中获取管理它的对象池
  • 让Bean实现BeanFactoryAware接口,即可接收到BeanFactory(对象池)
  • 如果子对象和父对象定义了同名的bean,则在子对象中获取的是本对象池中的bean
JS中this的指向是不固定的!!!
  • this的指向:
  1. 事件监听函数中的this,指向触发事件的标签元素
  2. jQuery的Ajax请求处理函数中的this,指向xhr对象
  3. setTimeout等定时器函数中的this,指向window对象
  4. 迭代函数中的this($.each, [].foreach),指向当前被迭代的元素
  5. 构造函数中的this,指向当前构造的实例对象
  • 改变函数中this指向的方法
    • newFunc = func.bind(obj):返回了一个新函数,调用时func内部的this指向了obj
    • func.apply(obj,....):立即调用func函数,并且使func内部的this指向obj
    • func.call(obj,[func的参数]):同上,区别仅仅是传参的方式不同
    • new Func = $,proxy(func,obj):返回一个新函数,与bind类似
    • 使用_this或that或me等变量代替this(因为this会被改变)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值