实训-贴吧管理系统 这星期我们在实训,周六要去比赛,实训结束后我又要去集训,所以这星期没学多少东西。不过在实训的时候,因为老师对用框架的同学要求比较严,提了好多附加条件,其中有一个是图形验证码。因为以前写项目我们全都是用的邮箱验证,也没想过去实现一下图形验证码,所以在实训的时候我就去学了一下图形验证码。Graphics 类:是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。不过 这个图形验证码不能在静态的页面测试,要在程序运行之后打开的页面测试。
并发-Java并发机制的底层实现原理 它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另一个线程可以读到这个修改的值。volatile比synchronized的使用和执行成本更低,因为它不会引起线程上下文切换和调度。在生成汇编代码时会在volatile变量修饰的共享变量进行写操作的时候会多出Lock前缀的指令。Lock前缀的指令在多核处理器下会引发两件事情:(1)将当前处理器的缓存行的数据写回到系统内存。(2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。
MySQL日志 错误日志时MySQL中最重要的日志之一,它记录了mysqld启动和停止时,以及服务器再运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。该日志时默认开启的,默认存放目录/var/log/,默认的日志文件名为mysqld.log。
MySQL高级(InnoDB引擎) 在执行DML语句时,如果这些数据页在Buffer Pool中没有存在,不会直接操作磁盘,而是将数据变更缓存在Change Buffer,在以后读取数据时,再将数据合并到Buffer Pool中,再将合并后的数据刷新到磁盘中。和聚集索引不同,二级索引时非唯一的,并且以相对随机的顺序插入二级索引。是主内存中的一共区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池中没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。
打家劫舍问题 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。[1,2,3,1]4偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。12偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
MySQL高级--锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。
MySQL高级(二) sql优化,视图,存储器,触发器多次插入每一次insert都要与数据库建立连接。一次插入数据不宜过多,不要超过1000条。主键顺序插入效率高于乱序插入。如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。
Mysql高级(一) 存储引擎是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,所以存储引擎也可被称为表类型。可以在创建表的时候指定存储引擎,mysql5.5之后默认存储引擎InnoDB。索引(index)帮助mysql高效获取数据的数据结构(有序)。在原始数据之外,数据库还要维护索引这种的数据结构,通过这种数据结构指向数据。
和为k的子数组、中位数为k的子数组 这个思路和上面那道题思路差不多,求中位数为k的子序列,可以将大于k的元素都设为1,小于k的元素都设为-1,将等于k的元素都设为t,和为t或者t+1的序列排序后中位数就为key。4、进行比较,如果当前元素下标小于所找的元素下标,证明该元素前面所有子序列没有k出现,直接将前缀和存入map加一就行。利用前缀和的思想,求出每一个元素到第一个元素的和,两个元素前缀和相减就是两个元素之间所有元素的和。解释:中位数等于 4 的子数组有:[4]、[4,5] 和 [1,4,5]。1、遍历数组,找到值为k的元素的下标。
商城项目-秒杀功能 这次完善项目的时候加入了秒杀功能。这个功能要考虑的地方挺多的,我在网上找了一些资料,然后把这个功能大致完成了。但是还有很多地方我没考虑到,有些地方实现的不是很好,等以后再回头看对这个功能进行进一步的完善吧。
商城项目-客服功能 最近一段时间我们在完善项目,我们在写的项目是一个商城项目。上次考核的时候考虑到进度问题,客服功能只做了一半,这次项目我对它进行了完善。--more-->客服功能因为要实现即时通信,我主要是基于websocket实现的,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的。因为是第一次去写类似的功能,所以在实现过程中遇到了很多问题。
并发-并发编程的挑战 实际上,系统内只有一个CPU,而使用多线程时,那么真实系统环境下不能并行,只能通过切换时间片的方式交替进行,而成为并发执行任务。可以参考concurrentHashMap锁分段的思想,不同线程处理不同段的数据,这样在多线程竞争条件下,可以减少上下文切换的时间。避免创建不需要的线程,比如任务很少,但是创建了很多的线程,这样会造成大量的线程都处于等待状态。异步调用指的是,调用者不管被调用的方法是否完成,都会继续执行后面的代码,当被调用的方法完成后会通知调用者。不一定,因为线程有创建和上下文切换的开销。
JVM面试题 Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历16次Minor GC还能在新生代中存活的对象,才会被送到老年代。在这里,先想一下,如果没有双亲委派,那么用户是不是可以自己定义一个java.lang.Object的同名类,java.lang.String的同名类,并把它放到ClassPath中,那么类之间的比较结果及类的唯一性将无法保证,因此,为什么需要双亲委派模型?回收目标主要是常量池的回收和类型的卸载,各线程共享。
mysql引擎 如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,包含很多更新、删除操作,那么innodb是比较合适的选择。MyISAM:MyISAM是mysql5.5之前的默认引擎。不支持事务,只支持表锁,不支持行锁。如果操作主要以读取和插入为主,修改和删除的操作很少,对数据的并发性和完整性要求并不是很强的情况下可以用该引擎,比如用户日志,评论等。由于受到硬件的问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。suport:是否支持引擎(default是默认引擎)
Java基础-反射 使用反射会导致内部暴露,由于反射允许代码执行一些正常情况下不被允许的操作(比如访问私有的属性和方法),所以反射可能会导致一些意料之外的副作用—代码有功能上的错误,降低了可移植性。在性能上,反射包括了一些动态类型,所以JVM无法对这些代码进行优化,因此,反射的效率要比那些非反射的操作低很多,应该避免在经常被执行的代码和对性能要求很高的程序中使用反射。在程序内部逻辑上,程序人员希望在源代码里面看到程序的逻辑,反射等绕过了源代码的技术,因此会带来维护问题,反射代码比相应的直接代码更加复杂。逆向代码,例如反编译。
【每周总结】 前一段时间我复习了java基础,在昨天我们进行了考核,感觉自己什么都没复习到,昨天的题有两个我都提前看到过相关的知识点,但是却没有注意,就是大致理解了一下,所以在考核的时候就是想不起来怎么写。Java的序列化和反序列化这个知识点我记得以前有一次考核的时候学长问过我一次,前几天我写题的时候也遇到了,当时看题解的时候感觉有点不太理解,然后就光记得序列化就是把可以看懂的转化为看不懂的,反序列化就是反过来,以前没有重视这个知识点,考核后我才又重新去记了这个知识点,原来序列化是。核心作用是对象状态的保存与重建。