自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (3)
  • 收藏
  • 关注

原创 TTS项目坑

包版本要按照requirement来cudnn要安装,否者无法完成卷积操作batchsize 和 numworkers的设置

2021-04-25 10:15:38 301

原创 集合类源码

/** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } /** * Appends the specified element to the end of this list. * ...

2021-02-09 14:40:44 128

原创 8.3项目部署

内存不小于4G,需要部署的环境:Nginx负载均衡,平均地把服务分配到tomcat上。软件能用yum安装就用yum安装,有些软件yum里版本太旧,可以把官网提供的yum库文件下载到服务器,再用yum安装。下载这些包本地的脚本init_sql.zip传进来安装上面那些东西:先安装一个小工具,unzip,cd到根目录,搜索并安装unzip包,yum install -y java-latest-openjdk.x86_64,然后java -version查看版本,检查是否安装好了。安

2021-01-20 18:00:23 198

原创 8.2项目监控

Spring Boot Actuator(1)Endpoints:监控应用的入口,Spring Boot内置了很多端点,也支持自定义端点。(2)监控方式:HTTP或JMX。(3)访问路径:例如"/actuator/health"。(4)注意事项:按需配置暴露的端点,并对所有端点进行权限控制。Spring Boot Actuator默认有20多个端点,几乎所有端点都是启用的,只有一个端点是禁用的(关闭服务器的post请求,一个后门,别启用了)。但只暴露了两个端点,其他端点要访问的话需要配置。默认开

2021-01-19 20:44:07 127

原创 8.1单元测试

Spring Boot Testing(1)依赖:spring-boot-starter-test(2)包括:Junit、Spring Test、AssertJTest Case(1)要求:保证测试方法的独立性(2)步骤:初始化数据、执行测试代码、验证测试结果、清理测试数据。(3)常用注解:@BeforeClass(在类初始化之前)、@AfterClass、@Before(每调一个测试方法前)、@After(每调一个测试方法后)。执行测试方法之前就初始化一份数据,测试之中就用这一份数据,测试完

2021-01-19 20:21:49 100

原创 7.10优化网站性能

本地缓存(1)将数据缓存在应用服务器上,性能最好。(2)常用缓存工具:Ehcache、Guava、Caffein等。分布式缓存(1)将数据缓存在NoSQL数据库上,跨服务器。(2)常用缓存工具:MemCache、Redis等。多级缓存(1)>一级缓存(本地缓存)>二级缓存(分布式缓存)>DB(2)避免缓存雪崩(缓存失效,大量请求直达DB,提高系统的可用性。本次用压力测试工具,对优化前后进行比较,对缓存的价值有明确的概念。本地缓存:我们这次用caffeine。NoSQL

2021-01-19 19:43:59 166

原创 7.9文件上传云服务器

两种方式:有空看看七牛云产品手册中的概述、对象存储功能、JavaSDK相关使用方法。对象存储:创建空间,一般一种资源一个空间header:CDN 测试域名:qn63k6fo4.hn-bkt.clouddn.comshare:CDN 测试域名:qn64jjxzz.hn-bkt.clouddn.com传头像功能导包 <dependency> <groupId>com.qiniu</groupId> <artifactId>qin

2021-01-19 16:43:23 198

原创 7.8生成长图

生成长图的手段,服务端通过工具读取HTML模板中的内容生成长图。官网https://wkhtmltopdf.org,下载安装,把安装目录添加到环境变量。新建data\wk-images和D:\javing\workspace\data\wk-pdfs目录,打开命令窗口,输入C:\Users\hp>wkhtmltopdf http://www.nowcoder.com d:/WorkPlace/data/wk-pdf/1.pdf生成图片,以压缩的形式:wkhtmltoimage --qu.

2021-01-19 13:52:11 241

原创 7.7热帖排行功能

一些网站的排行公式:开发过程通常而言,启动一个定时任务进行分数计算,合理的方式:前面的热门帖子保持一定的时间不变,等过段时间定时任务算完在更新。这里为了方便测试,定时任务设置为5min更新一次。结果的展现:排序的不同定时计算没必要把所有的帖子都算一遍,把分数变化的帖子丢到一个缓存中,等到定时到了要计算的时候把缓存中的帖子拿出来计算,这样减轻服务器的负担。RedisKeyUtil//帖子分数,存的是产生变化的帖子,是多个。不需要传入Id public static String getP

2021-01-19 12:35:47 464

原创 7.6任务执行和调度

JDK线程池(1)ExecutorService(2)ScheduledExecutorServiceSpring线程池(1)ThreadPoolTaskExecutor(2)ThreadPoolTaskSchedular分布式定时任务Spring Quartz线程池有关内容整体了解:JDK自带了线程池ExecutorService普通线程池,ScheduledExecutorService创建定时任务。spring框架的线程池ThreadPoolTaskExecutor普通线程池,Th

2021-01-18 18:24:23 233 3

原创 7.5网站数据统计

UV(Unique Visitor)(1)独立访客,需通过用户IP排重统计数据。(2)每次访问都要进行统计。(3)HyperLogLog,性能好,且存储空间小。DAU(Daily Active User),更关注的是用户的有效性和核心程度,要求结果精确。(1)日活跃用户,需通过用户ID排重统计数据。(2)访问过一次,则认为其活跃。(3)Bitmap,性能好、且可以统计精确的结果。流程RedisKeyUtil private static final String PREFIX_UV

2021-01-18 15:35:38 164

原创 7.4Redis高级数据类型

HyperLogLog(1)采用一种基数算法,用于完成独立总数的统计。(2)占据空间小,无论统计多少个数据,只占12k的内存空间。(3)不精确的统计算法,标准误差为0.81%。Bitmap(1)不是一种独立的数据结构,实际上就是字符串。(2)支持按位存取数据,可以将其看成是byte数组。(3)适合存储索大量的连续的数据的布尔值。 // 统计20万个重复数据的独立总数. @Test public void testHyperLogLog() { Stri

2021-01-18 13:39:50 90

原创 7.3置顶、加精、删除

功能实现(1)点击置顶,修改帖子的类型。(2)点击“加精”、“删除”,修改帖子的状态。  权限管理(1)版主可以执行“置顶”、“加精”操作(2)管理员可以执行“删除”操作。  按钮显示(1)版主可以看到“置顶”、“加精”按钮。(2)管理员可以看到“删除”按钮。thymeleaf支持security,但是要升级到在thymeleaf-extras-springsecurity。在github中搜索thymeleaf-extras-springsecurity可以查看相关文档。mvn库里搜

2021-01-18 12:54:24 821

原创 7.2权限控制

用7.1中的springsecurity来进行如下的功能拓展登录检查废弃原来的登录检查拦截器// @Autowired// private LoginRequiredInterceptor loginRequiredInterceptor;授权配置对当前系统内包含的所有请求,分配对应的访问权限(普通用户、版主、管理员) /** * 权限: 普通用户 */ String AUTHORITY_USER = "user"; /** .

2021-01-17 22:41:01 532

原创 7.1SpringSecurity

spring security底层机制:springmvc的底层核心是dispatchServlet,它会把请求分发给一个一个的控制器(Controller),一个项目中只有一个dispatchServlet,但是会有多个Controller,它们是一对多的关系。在请求分发给controller中,拦截器可以拦截controller的请求(拦截器也可以有多个),这些组件构成了springMVC的底层。拦截器和控制器是springMVC自己规定的,但是dispatchServlet满足JavaEE的规范..

2021-01-15 19:48:30 131

原创 6.3首页搜索功能

开发流程搜索服务前面的小坑:在postmapper中的insertDiscussPost添加keyProperty=“id”搜索服务:将帖子保存至es服务器从es服务器中删除帖子从es服务器中搜索帖子//搜索服务@Servicepublic class ElasticsearchService { //往es服务器里存帖子的数据 @Autowired private DiscussPostRepository discussPostRepository;

2021-01-15 16:30:01 303

原创 6.2spring整合elasticsearch

踩坑:springboot2.2.0版本中 data: elasticsearch:cluster-name: 和cluster-nodes: 被横线划掉解决:spring-boot-version 换成2.1.5es的9200和9300端口9200:使用http请求,所以我们的rest方式的client要使用这个端口进行访问9300:使用tcp请求,是系统预留给es内部组件之间的通信方式配置# ElasticsearchPropertiesspring.data.elasticsearch.

2021-01-15 14:22:51 316

原创 6.1.Elasticsearch入门

Resultful风格:一种设计风格,规定了前后端按照何种规定交互,对请求标准的描述,elasticsearch用http协议就可以访问,实用且方便。和关系型数据库的术语相比较,有类似的地方在ES1.6之后,索引对应的是一张表索引:表 table 6.0之前数据库 database –》类型:,ES7.0之后,就彻底放弃,表 table。就没有类型这个东西了文档:表中的一行(一条数据),结构通常采用json row字段:列分布式部署集群:多态服务器组合在一起就是集群,提高整体的处理能力.

2021-01-14 20:44:05 144

原创 5.5显示系统通知功能

坑:只有aaa账号可以完成显示系统消息,其他不行—>原因:会提示消息为空,只有关注消息、点赞消息、回复消息都在的时候才能显示系统通知页面。解决:1.当你发送第一次消息完了之后在点回去就行了2.还没找到第一次啥也没有还能进去看消息的解决方法DAO <select id="selectLatestNotice" resultType="Message"> select <include refid="selectFields"></inclu.

2021-01-14 19:18:06 367 1

原创 5.4发送系统通知

拼一个对象,触发事件,处理事件。面向事件编程。Entity实体类中编写消费者和生产者创建event包,专门处理,里面的eventproducer发送消息,eventconsumer处理消息Eventconsumer中,把从producer那边拿到的消息进行内容和格式的判断,之后发送站内通知,先设置发送者和接受者,为了获得发送的消息的具体内容,发送的消息的内容需要拼出,创这个hashmap(content),从event里面获取内容装进去,构造好消息,最后用messageservice塞进去给响应的.

2021-01-14 15:05:28 293

原创 5.3Spring-Kafka

Spring中整合卡夫卡:导入依赖,配置信息,记得先开启卡夫卡然后再进行测试。

2021-01-14 13:32:06 119

原创 5.2Kafka入门

本项目只用到核心的发消息功能卡夫卡特点;高吞吐量,消息持久化,高可靠性,高扩展性术语:Broker –kafka的服务器Zookeeper – 管理集群,卡夫卡内置Topic —主题,发布者把东西发到的空间 (消息队列实现方式两种:点对点(上次的消费者-生产者模式,一个消费者对应一个生产者);发布订阅模式:发布者把东西发到一个地方,可以有多个消费者同时读到,这个是卡夫卡的模式。)Partition:topic下面的分区,从前往后Offset:消息在分区里面的索引Leader Replica.

2021-01-14 11:56:57 167

原创 5.1阻塞队列

case一个文件内只能有一个类是public哦实际上就是一个接口,解决线程通信问题,阻塞方法:put,take生产者消费者模式:一个产生数据的线程,一个使用数据的线程实现类:ArrayBlockingQueue LinkedBlockingQueue PriorityBlockingQueue……各种方式实现队列。面试的时候上面那些实现类都可能问...

2021-01-13 22:23:12 83

原创 4.6关注列表、粉丝列表功能

service //查询某个用户关注的人 public List<Map<String, Object>> findFollowee(int userId, int offset, int limit) { String followeeKey = RedisKeyUtil.getFolloweeKey(userId, ENTITY_TYPE_USER); Set<Integer> targetIds = redisTem.

2021-01-13 21:06:08 599

原创 4.5关注、取消关注功能

开发流程还要统计用户的关注数、粉丝数理清楚redis中各种key的设计方式!!!RedisKeyUtil //拼key的方法 // 某个用户关注的实体 // followee:userId:entityType -> Zset(entityId,now) public static String getFolloweeKey(int userId,int entityType){ return PREFIX_FOLLOWEE + SPLIT +.

2021-01-13 21:01:09 405

原创 4.7优化登录模块

重构验证码设置验证码的redisKey //登录验证码 public static String getKaptchaKey(String owner){ return PREFIX_KAPTCHA + SPLIT + owner; }重构获取验证码的方法 //重构 //验证码的归属 String kaptchaOwner = CommunityUtil.generateUUID(); Cook.

2021-01-13 20:51:47 148

原创 4.4 收到的赞功能

重构点赞功能 public void like(int userId,int entityType,int entityId,int entityUserId){// 重构 redisTemplate.execute(new SessionCallback() { @Override public Object execute(RedisOperations operations) throws DataAccessE.

2021-01-12 20:10:13 208

原创 4.3点赞功能

实现逻辑RedisKeyUtil //生成的是某个实体的赞这个key// like:entityType:entityID -> set(userId) public static String getEntityLikeKey(int entityType,int entityId){ return PREFIX_ENTITY_LIKE+SPLIT+entityType+SPLIT+entityId; } //某个用户的赞 // .

2021-01-12 19:02:56 196

原创 3.10 记录日志功能

上面那种解决方法太原始,弊端在于方法中是业务处理的方法,却加入了不是业务需求的记录日志(记录日志是系统需求),这样就提高了业务的耦合性,不好。所以可以使用AOP来处理。Aspect Oriented Programing,是对OOP的一个互补。我们采用aop解决问题,是把代码封装到一个组件里面,完全面向一个Aspect编程。利用框架做一个织入的行为,让target和aspect相结合。首先,我们程序中已经开发好的各种业务逻辑的一个个Bean,我们称之为Target,其次,目标对象中有很多地方可以.

2021-01-12 13:42:21 233

原创 3.9 统一处理异常

异常是一层一层往上抛的,所以只要处理表现层就能满足需求。springboot自动处理,把要显示的错误网页放在templates/error,自动识别错误记录日志spring统一处理:@controlleradvice//这个组件会扫描所有组件,要做限制->这个注解只去扫描带有controller注解的那些bean@ControllerAdvice(annotations = Controller.class)public class ExceptionAdvice { priv.

2021-01-12 10:58:46 111

3.8发送私信(异步)

DAO <!-- 声明id的属性,那么就会回填id,让其自增长--> <insert id="insertMessage" parameterType="Message" keyProperty="id"> insert into message(<include refid="insertFields"></include>) values(#{fromId},#{toId},#{conversatio

2021-01-11 21:35:07 125

原创 3.7私信列表功能

b) 私信列表所展现的是当前用户和某些人的会话c) 设置会话id的目的,方便之后的筛选方便d) 写mappere) 写service,就是思考业务层的功能,如果是直接拿取Dao层的话就直接简单实现就可以了数据库设计from_id,to_id:从哪里来,到哪里去conversation_id:把上面哪两个id通过 _ 连在一起。对于方向的问题,其实他们都是两个人之间的会话,就不必要分成不同方向了,就规定小id在前。@Mapperpublic interface MessageMapper.

2021-01-11 19:45:38 438 1

原创 3.6添加评论

数据层增加评论数据、修改帖子的评论数量 int insertComment(Comment comment); 在mapper.xml中 <insert id="insertComment" parameterType="Comment"> insert into comment(<include refid="insertFields"></include>) values(#{userId},#{entity.

2021-01-11 15:39:39 337

原创 3.5显示评论

数据层数据库设计:entity_type:评论的目标类别,比如1代表帖子,2代表评论。entity_id:帖子的id。target_id:评论的Id(用于做楼中楼回复),具有指向性的。@Mapperpublic interface CommentMapper { List<Comment> selectCommentByEntity(int entityType,int entityId,int offset,int limit);//查询帖子的评论,还是评论的评论 .

2021-01-11 14:17:19 215

原创 3.3帖子详情功能

实现逻辑就是按照图中的逻辑由上自下的写呗。Mapper DiscussPost selectDiscussPostById(int id);Service public int addDiscussPost(DiscussPost post){ if (post == null){ throw new IllegalArgumentException("参数不能为空"); } //转义HTML标记 .

2021-01-08 19:46:14 270

原创 3.4事务管理

事务管理:前置知识 transaction management事务是由N步数据库操作序列组成的逻辑执行单元,这系列操作要么全执行、要么全放弃执行。面试重点:隔离性:各个事务的执行互不干扰,任何事务的内部操作对其他的事务都是隔离的。隔离级别越高,效率越慢,同时也约安全。第一类丢失更新:某一个事务回滚,导致另一个事务已更新的数据丢失了。第二类丢失更新:某一个事务的提交,导致另一个事务已更新的数据丢失了。不可重复读:某一个事务,对同一个数据的读取结果不一致幻读:某一个事务,对同一个表前后查询

2021-01-08 19:42:55 62

原创 3.2发布帖子功能

示例case使用jQuery发送ajax请求的示例项目实践采用ajax请求,实现发布帖子的功能实现逻辑坑:一定要@autowired依旧是dao-service-controller,不同的是这次在前端要多写一个jQuery文件用于页面的异步交互。DAO int insertDiscussPost(DiscussPost discussPost);mapper.xml <insert id="insertDiscussPost" parameterType="Di.

2021-01-08 16:29:56 488

原创 3.1敏感词过滤功能

思路:2,3指针指向第一个字符,然后1指针去检查前缀树,因为第一个是安全的,所以记录到stringbuffer里面,然后两个指针接着下移,w也没问题。2,3指针到a了,1检查前缀树,有a,还要接着往下看,那么2就不动,3接着往下走,3指向b,1检查前缀树中有b,3接着往下走,到了f,1检查f,前缀树b向下无f,所以是安全的,把a加入到stringbuffer中。2,3指针移向b。按照这个套路循环到2指针指向末尾。(2指针一直往前走,3可能会小范围回调)(把检测到的敏感词替换成*)代码实现:写sen.

2021-01-08 14:06:00 364

原创 2.9检查登录状态

使用拦截器目的:让未登录用户不能访问设置页面在方法前标注自定义注解,拦截所有的请求,只处理带有该注解的方法。实现逻辑1.写LoginRequired的注解//这个注解写在方法上@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME) //只有在程序运行时才能使用public @interface LoginRequired {}2.再把该注解写到对应需求拦截的方法上面//这两个方法需要加注解,表示只有登录之后才能访问

2021-01-08 10:50:08 104

原创 2.8账号设置功能

账号设置头像设置开发步骤访问账号设置页面上传头像获取图像坑:如果碰到 thymeleaf 不能解析地址,把maven clean一下。现在密码是1密码设置三层调用

2021-01-08 10:29:58 210

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除