跳至主要內容
yyshino blog

yyshino blog

欢迎各位小伙伴

面试题总结
面试题、面经总结
读书笔记
读后感
文章
前端知识 | 整体了解 | 深入学习 | 复习
friend:芈渡
friend:芈渡
开发日常
friend:Mushr
friend:Mushr
祝你笑口敞开
前端Vue开发者从0到1转Java后端开发傻瓜式教程
前端Vue开发者从0到1转Java后端开发傻瓜式教程
前端Vue开发者从0到1转Java后端开发傻瓜式教程

背景

本篇文章主要帮助前端开发者快速上手Java,理论知识建议背诵面试题

黄金Tips

  • 思维切换:前端“界面驱动”,后端“数据+安全+性能驱动”。

    • 从“快速跑起来” → “稳健可维护”

    • 从“页面驱动” → “数据+流程驱动”

    • 从“我自己写” → “团队 + 框架约定”

  • 利用优势:你懂API设计和用户体验,能写出更好用的后端。

  • 每天实践:别只看视频,必须敲代码,出错是正常。

  • 社区:掘金、CSDN、B站评论区、Spring官方论坛。

  • 工具神器:Lombok(减少样板代码)、MapStruct(对象转换)、Swagger/Knife4j(自动API文档)。


yyshino大约 8 分钟AfterEndJava
搜索接口调研

一、背景

背景:老板让我优化一个用户搜索接口,要求是用户搜索请假交接人时优先展示同部门的用户其次是上级和下级部门的用户最后是其他部门的用户。

二、优化方案

  1. 数据库查询优化。目前的公司内部的平台都是比较通用的查询,一些没有用的字段,也查询了。这里我去找前端沟通确定他们那边需要用到哪些字段,开发一个专用接口去进行操作。
  2. 借鉴Elasticsearch的IndexSorting技术,优化搜索性能。
  3. 并行调用与异步处理
    • 使用CompletableFuture实现并行调用,提高接口响应速度。 示例代码:
      CompletableFuture<Void> task1 = CompletableFuture.runAsync(() -> {
          // 查询同部门用户
      });
      CompletableFuture<Void> task2 = CompletableFuture.runAsync(() -> {
          // 查询上级部门用户
      });
      CompletableFuture<Void> task3 = CompletableFuture.runAsync(() -> {
          // 查询下级部门用户
      });
      CompletableFuture.allOf(task1, task2, task3).join();
      

yyshino小于 1 分钟优化调研
如何搭建自己的个人博客

一、方案汇总

方案 平台 成本 优缺点
方案一:社区平台 - 飞书

- 语雀

- CSDN/博客园

- 其他技术社区
经济上:0

技术上:无
优点:

- 方便,0成本

- 背靠社区

- 有后台管理


缺点:

- 比较难自定义页面
方案二:Github Pages/Vercel + Hexo/Vuepress - Github Pages

- Github + Vercel

- Gitee Pages(Pro关闭了)
经济上:0

技术上:需要了解前端知识
优点:

- 自定义能力强

- 主题多


缺点:

- 这类博客一般是纯静态网页,一般没有后台或数据统计

- 需要一定前端知识
方案三:云服务器 + Wordpress - 云服务器 + Wordpress 经济上:需要一台云服务器(0~100/月,新用户/学生优惠)

技术上:无,了解前端/后端更好
优点:

- 主题多

- 有后台管理


缺点:

- 经济上有一定成本
方案四:微信公众号以及其他各类公众号 - 申请公众号 经济上:0

技术上:无
优点:

- 方便,0成本

- 背靠社区

- 有后台管理


缺点:

- 比较难自定义页面

yyshino大约 3 分钟FrontEnd博客
Spring 事务

1. Spring 事务的工作原理

Spring 使用两种代理机制来管理事务:

  • JDK 动态代理:针对实现了接口的类,Spring 会创建一个实现了相同接口的代理类。事务逻辑通过代理类在方法调用时插入。
  • CGLIB 代理:针对没有实现接口的类,Spring 会使用 CGLIB 生成子类代理,拦截方法调用并插入事务逻辑。

不论哪种代理方式,Spring 都是在代理类中对事务进行管理。如果调用来自外部的类,代理对象会拦截该调用并正确地管理事务逻辑。

2. Spring 事务失效场景


yyshino大约 2 分钟AfterEndSpring
Emoji 表情报自取
😁😀😂😃😄😅😆😉😊😋😎😍😘😗😙😚🙂🤗🤔😐😑😶🙄😏😣😥😮🤐😯😪😫😴😌😛😜😝😒😓😔😕🙃🤑😲🙁😖😞😟😤😢😭😦😧😨😩😬😰😱😳😵😡😠😷🤒🤕😇🤓😈👿👹👺💀👻👽👾🤖💩😺😸😹😻😼😽🙀😿😾🙈🙉🙊👶👦👧👨👩👴👵👮💂👷👸👳👲👱👰👼🎅🙍🙎🙅🙆💁🙋🙇💆💇🚶🏃💃👯🛀🛌👤👥🏇🏂🏄🚣🏊🚴🚵👫👬👭💏💑👨👩👦💪👈👉👆🖕👇🖖🤘✋👌👍👎✊👊👋👏👐🙌🙏💅👂👃👣👀👅👄💋💘💓💔💕💖💗💙💚💛💜💝💞💟💌💤💢💣💥💦💨💫💬💭👓👔👕👖👗👘👙👚👛👜👝🎒👞👟👠👡👢👑👒🎩🎓📿💄💍💎

  

🐵🐒🐶🐕🐩🐺🐱🐈🦁🐯🐅🐆🐴🐎🦄🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🐘🐭🐁🐀🐹🐰🐇🐻🐨🐼🐾🦃🐔🐓🐣🐤🐥🐦🐧🐸🐊🐢🐍🐲🐉🐳🐋🐬🐟🐠🐡🐙🐚🦀🐌🐛🐜🐝🐞🦂💐🌸💮🌹🌺🌻🌼🌷🌱🌲🌳🌴🌵🌾🌿🍀🍁🍂🍃

  

🍇🍈🍉🍊🍋🍌🍍🍎🍏🍐🍑🍒🍓🍅🍆🌽🍄🌰🍞🧀🍖🍗🍔🍟🍕🌭🌮🌯🍳🍲🍿🍱🍘🍙🍚🍛🍜🍝🍠🍢🍣🍤🍥🍡🍦🍧🍨🍩🍪🎂🍰🍫🍬🍭🍮🍯🍼☕🍵🍶🍾🍷🍸🍹🍺🍻🍴🔪🏺

  

🎃🎄🎆🎇✨🎈🎉🎊🎋🎍🎎🎏🎐🎑🎀🎁🎫🏆🏅⚽⚾🏀🏐🏈🏉🎾🎱🎳🏏🏑🏒🏓🏸🎯⛳🎣🎽🎿🎮🎲🃏🀄🎴

  

🌍🌎🌏🌐🗾🌋🗻🏠🏡🏢🏣🏤🏥🏦🏨🏩🏪🏫🏬🏭🏯🏰💒🗼🗽⛪🕌🕍🕋⛲⛺🌁🌃🌄🌅🌆🌇🌉🌌🎠🎡🎢💈🎪🎭🎨🎰🚂🚃🚄🚅🚆🚇🚈🚉🚊🚝🚞🚋🚌🚍🚎🚐🚑🚒🚓🚔🚕🚖🚗🚘🚙🚚🚛🚜🚲🚏⛽🚨🚥🚦🚧⚓⛵🚤🚢🛫🛬💺🚁🚟🚠🚡🚀🚪🚽🚿🛁⌛⏳⌚⏰🕛🕧🕐🕜🕑🕝🕒🕞🕓🕟🕔🕠🕕🕡🕖🕢🕗🕣🕘🕤🕙🕥🕚🕦🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌝🌞⭐🌟🌠⛅🌀🌈🌂☔⚡⛄🔥💧🌊

  

🔇🔈🔉🔊📢📣📯🔔🔕🎼🎵🎶🎤🎧📻🎷🎸🎹🎺🎻📱📲📞📟📠🔋🔌💻💽💾💿📀🎥🎬📺📷📸📹📼🔍🔎🔬🔭📡💡🔦🏮📔📕📖📗📘📙📚📓📒📃📜📄📰📑🔖💰💴💵💶💷💸💳💹💱💲📧📨📩📤📥📦📫📪📬📭📮📝💼📁📂📅📆📇📈📉📊📋📌📍📎📏📐🔒🔓🔏🔐🔑🔨🔫🏹🔧🔩🔗💉💊🚬🗿🔮

  

🏧🚮🚰♿🚹🚺🚻🚼🚾🛂🛃🛄🛅🚸⛔🚫🚳🚭🚯🚱🚷📵🔞🔃🔄🔙🔚🔛🔜🔝🛐🕎🔯♈♉♊♋♌♍♎♏♐♑♒♓⛎🔀🔁🔂⏩⏪🔼⏫🔽⏬🎦🔅🔆📶📳📴🔱📛🔰

  

⭕✅❌❎➕➖➗➰➿❓❔❕❗🔟💯🔠🔡🔢🔣🔤🆎🆑🆒🆓🆔🆕🆖🆗🆘🆙🆚🈁🈶🈯🉐🈹🈚🈲🉑🈸🈴🈳🈺🈵◽◾⬛⬜🔶🔷🔸🔹🔺🔻💠🔘🔲🔳⚪⚫🔴

yyshino小于 1 分钟otherJS
如何阅读源码

作者:lgd8981289

搬运自 https://github.com/lgd8981289/vue-next-mini

简介

那么在上一小节中我们已经知道了如何对vue的源代码进行debugger ,但是如果想要学习或者了解 vue的代码执行,那么光靠 debugger是不够的,除此之外我们还需要掌握另外一个能力,那么如何阅读源代码

阅读源代码的误区

很多同学在去阅读源代码的时候,都会面临一个误区,那就是:我需要把源代码中每一行代码都读明

这是一个非常不对的行为,很容易让我们 事倍功半


yyshino大约 3 分钟FrontEnd源码分析
Vue3源码解析

Vue响应式

原理

Proxy与Object.defineProperty

  1. Proxy
    1. Proxy 将代理一个对象(被代理对象),得到一个新的对象(代理对象),同时拥有被代理对象中所有的属性。
    2. 当想要修改对象的指定属性时,我们应该使用代理对象进行修改
    3. 代理对象 的任何一个属性都可以触发 handler 的 getter 和 setter
  2. Object.defineProperty
    1. Object.defineProperty 为指定对象的指定属性设置属性描述符
    2. 当想要修改对象的指定属性时,可以使用原对象进行修改
    3. 通过属性描述符,只有 被监听 的指定属性,才可以触发 getter 和 setter

yyshino大约 15 分钟FrontEndVue源码分析
WeakMap与Map的区别

WeakMap与Map的区别

WeakMap

  1. key必须是对象
  2. key是弱引用
弱引用与强引用
  • 弱引用:不会影响垃圾回收机制。即: WeakMap 的 key 不再存在任何引用时,会被直接回收。

  • 强引用:会影响垃圾回收机制。存在强应用的对象永远不会被回收。

对比示例

<script>

    let obj1 = {
        name: '张三'
    }
    let obj2 = {
        name: '张三'
    }

    // 强引用
    const map = new Map()
    // 弱引用
    const weakMap = new WeakMap()
    map.set(obj1,'value')
    weakMap.set(obj2,'value')

    obj1 = null
    obj2 = null

    console.log('map',map) // Map(1) {{…} => 'value'}
    console.log('weakMap',weakMap) // WeakMap {} 空
    
    /**
    此时 WeakMap 中不存在任何值,即: obj2不存在其他引用时, WeakMap 不会阻止垃圾回收,基于obj2的引用将会被清除。这就证明了 WeakMap 的 弱引用特性。
    */
</script>

yyshino小于 1 分钟FrontEndJS