- 博客(113)
- 资源 (75)
- 收藏
- 关注
原创 OpenAI Function calling
最近 OpenAI 在 6 月 13 号发布了新 feature,主要针对模型进行了优化,提供了 function calling 的功能,该 feature 对于很多集成 OpenAI 的应用来说绝对是一个“神器”。
2023-08-20 11:21:38
1428
原创 Graphql中的N+1问题
Graphql 是一种 API 查询语言和运行时环境,可以帮助开发人员快速构建可伸缩的 API。然而,尽管 Graphql 可以提供一些优秀的查询性能和数据获取的能力,但是在使用 Graphql 的过程中,开发人员也会遇到一些常见问题,其中最常见的一个问题是 N+1 问题。
2023-08-20 11:05:20
928
原创 一个入门级别的前端打包工具
写在前面长期以来,前端的模块化管理都不很成熟(webpack出现之前),为此,早期(ES5时代)为了实现依赖管理,甚至会利用window等全局对象进行模块注册。而如今有了webpack,rollup等优秀的打包工具,让前端开发起来事半功倍,因此笔者觉得很有必要去学习下这种划时代工具的实现思路。因此,本篇将讲述如何一步步实现一个初级的前端打包工具,仅供学习和分享,希望读完后可以让大家对打包工具不只是停留在会用(光看文档)的基础上,而是能够有更多的思考(比如如何优化和按需定制)。如果你准备好了,请先倒一
2020-09-13 22:17:28
1867
原创 WebSocket分享
1.开篇以下为我之前給组内分享的有关WebSocket的话题,略有删减,未完待续。。。长期以来,在web领域中,若想让客户端与服务端交互,我们首(或者说唯一的)选的肯定是Http。而随着web应用的快速发展,数据的消费量和功能需求的强度也逐渐增加,很显然,传统的Http模式早已不能满足我们,更多的需求则希望服务端可以“主动”跟客户端通信来增加交互。不得已,long-polling逐渐...
2019-04-12 12:52:26
601
原创 前端组件化思想
1.开篇 先说说为什么要写这篇文章吧:不知从什么时候开始,大家相信前端摩尔定律:“每18个月,前端难度会增加一倍”。我并不完全认可这个数字的可靠性,但是这句话的本意我还是非常肯定的。 是的,前端越来越简单了,但也越来越复杂了—简单到你可以用一个Github的starter搭建一个框架,集成所有的全家桶,涵盖单元测试和功能测试,包括部署以及发布,甚至你开发时使用的UI库都让你写不了几行c...
2018-02-27 09:59:14
19876
3
原创 关于Promise的一些
The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.为什么要重新从定义回顾,是因为我觉得就是因为定义太过于简单,所以细节容易被忽略。比如怎么才算最终的状态?怎么更好的处理异常?如何
2018-02-27 09:56:17
657
原创 前端项目应该如何部署
一个标准的前端项目,必定始于yarn start,它将会经历babel编译,webpack构建,server启动等流程,然后由浏览器加载页面。这是很Dev的开发方式,可生产环境我们却往往不这么做。1.何为前端?如果按照以前的看法,前后端最本质的区别当然是运行环境了,一个是浏览器中所写即所见的UI界面,另一个则是藏在背后的服务。在这种简单的区分下,前端往往会被定义为HTML/CSS/Javascri
2017-07-27 10:14:45
27972
1
原创 浅析DDD(领域驱动设计)
最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等。其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模块,使得业务可独立服务化。为了找寻答案,看了不少书籍和博客,在DDD中找到了一些思路,个人觉得受益匪浅,或许也可以受用于大家,特分享于此。什么是DDD软件开发不是一蹴而就的事情,我们不可能在不了解产品
2017-03-15 20:34:50
14654
2
原创 Java8之函数接口
以方法作为参数传递时,Ruby有proc,C#有Delegate,而JavaScript则更不用说,唯独Java在这方面很尴尬。但Java8提供了Lambda表达式和函数接口,这无疑是Javer的福音,也使得Java这门语言更佳的优秀和易用。
2017-02-12 13:24:32
775
原创 ES201X
此Deck为我近期给组内分享的有关ES展望的Session,如下。Slide1: 先说一下我为什么讲这个Session:之前为Tech Radar准备了一个Session,是《ES2017》,可不知道为什么,在不知情的情况下就被别人给讲了,瞬间有一种被潜规则的感觉。都准备的差不多了,不讲还怪可惜的。再加上项目结束后许多同事未来可能会是React+ES6的技术栈,因此我就讲内容进行了调整,准备跟大家
2016-12-15 21:58:58
888
原创 就是要跨域
由于CORS(跨域)本身是具有安全隐患的,因此浏览器默认是禁止的。但跨域却在web开发中具有很重要的作用,也是前端dev经常为之头痛的领域。那么,前端到底如何跨这个域呢,且往下看。简书同步 blog同步前端常见的跨域手段如下: 1.script/link/img加载外部资源一个网站常常会加载以下外部资源:<script src="https://maxcdn.bootstrapcdn.c
2016-10-31 13:21:17
681
原创 微信小程序,你怎么看?
微信小程序自内测以来已经刷爆了整个IT圈,至少各大论坛(segmentfault,掘金,CSDN等)的前端板块已经被霸屏。其实小程序这种“无需下载,用完即走”的概念离大多数的微信用户都很近,就拿我们经常使用的“微信运动公众号”来举例:用户只要关注此公众号,并且绑定相应的能够提供记录步数功能的App,即可参与每天行走排名,这就“相当于”实现了一个无需下载但又很有用的小程序。小程序与之类似,但是请注意,
2016-09-28 12:50:33
3227
2
原创 Element和Node的区别你造吗?
1.写在前面 我们经常使用document.getElementById去获取DOM中的元素,也会使用childNodes来获取子节点。那么Element和Node的区别是什么?而什么又是HTMLCollection,HTMLElement,和NodeList呢?一个简单的页面:<html> <body> <h1>China</h1> <!-- My comment ...
2016-09-21 15:08:54
16662
3
原创 "Remote Work Via Git"的正确打开方式
写在前面git pull -r origin branch是程序员最常用的Git指令之一了。可现今为了保证安全性,许多公司的Git Server并不像访问Github那样容易,往往得通过VPN才能进行访问。那么问题来了,假如你在家里办公,连不上VPN肿么办?别懵逼,往下看。场景一小王,小宋和小马都是同一个公司的程序员,它们都在同一个项目上工作,本地都有同一个Git Repository。今天轮到小宋
2016-08-18 09:28:10
1383
原创 不一样的视角,不一样的VR
# 写在前面直到上周,我才跟同事一起看了Google I/O 2016发布会。其实也并不是不想关注VR,只是觉得AR/VR在现在已经被炒的太热了,以至于就好像我们已经完全掌控了它一样。但实际上我们才仅仅开始;或者说,我们还并未真正的开始。此次谷歌大会首推当家虚拟平台Daydream,这个名字好,一下子就体现了VR的最重要的特点。大会上,谷歌宣称未来将会发布可以完美运行Draydream的Androi
2016-08-10 20:24:34
1202
原创 从精益软件到精益思想
说起精益软件开发,这绝对算是一个老生常谈的话题了。所以在这里,我不想去谈论诸如“精益软件开发的几大原则”或是“精益软件开发的最佳实践”等陈词滥调;只是最近在同事的推荐下,拜读了一本有关IT运维方面的书籍(《凤凰项目》)。书中的故事十分有趣,同时又引人深思,细细品味后颇有感悟,对工作和生活上有了许多新的想法,于是便按耐不住写下此文。 写在前面布伦特是一个有着十年以上开发及运维经验的高级工程
2016-08-10 16:39:45
1884
1
原创 RSpec Trial
1 ### 开篇 这篇Deck是近期对RSpec测试框架的一个Session总结,参考了RSpec官方文档那个和Better Rspec的介绍,对RSpec的一些简单用法和最佳时间进行了介绍。 原文请戳
2016-05-30 22:18:52
840
原创 React从零学起
原文请戳 初接触React,除了不习惯其组件化的设计原则外,往往它所‘依赖’的众多module也会让初学者感到困惑,使得不知从何学起。此文只是我对React的一些浅析,希望能帮助想要学习React的朋友入门。1.React从来就是独立的正如上面我提到的,React’依赖’了很多module,但是这种依赖并不是所谓的耦合依赖,只是为了更好的去实现React。换句话说,React只是一个View层
2016-05-19 14:04:39
2026
原创 Mock & Stub (JUnit)
Visit This Article In Github PageAbstract Both mock and stub are mummy objects for unit test in spring.When you have lots of dependencies in unit test, creating fake object to reduce dependency is re
2016-05-19 14:00:47
1284
原创 Hello, Knockout
来源 也许你有过一些使用MVVM框架的经验,并且你熟悉各种主流框架的使用规则(Angular, Knockout),可你是否静下心去读一读其中的源码,思考一下其内部的实现呢?这个Deck是根据我对MVVM框架的理解编写而成,其中的demo完全模拟了Knockout.js的接口,希望可以跟大家一起去分享一下如何实现一个简单的MVVM框架
2016-05-19 13:50:41
833
原创 打造属于自己的MVVM框架: 3.双向绑定
MVVM中对Bingding的解析只能算viewModel->view的单项绑定,但MVVM绝不仅仅只有单向绑定,更重要的是如何监控viewModel变化,将信息实时的反馈给view。原文请戳 源码请戳如何监控Object的变化你会可能会遇到一下场景:前端UI已经渲染完成,但并没有数据,因此发送请求向服务器请求数据,AJAX回调完成后,用Callback里的值去更新UI(很可能是暴力的Jquer
2016-05-19 13:44:00
3538
原创 打造属于自己的MVVM框架: 2.模版渲染引擎
上一篇介绍了MVVM的基本知识,本篇讲针对MVVM的模版渲染引擎进行介绍,不但从原理上对模版引擎的渲染原理进行剖析,而且有会相应的实现代码。源码请戳 原文请戳 什么是模版渲染引擎还是先来看一下上一篇有关knockoutjs的Demo:<p>First name: <strong data-bind="text: firstName"></strong></p><p>Last name: <st
2016-05-19 13:38:24
2704
原创 打造属于自己的MVVM框架: 1.什么是MVVM
MVVM(Model View ViewModel)是一种基于MVC的设计,开发人员在HTML上写一些Bindings,利用一些指令绑定,就能在Model和ViewModel保持不变的情况下,很方便的将UI设计与业务逻辑分离,从而大大的减少繁琐的DOM操作。起源MVVM这个概念最是在2005年,由微软的工程师John Grossman在其博客中提出,最初这个概念是用在微软的WPF上的。直到最近几年
2016-05-19 13:31:05
21260
原创 你必须记住的30个CSS选择器[译]
开篇 有30个CSS选择器你必须烂熟于心,它们适应于当今各大主流浏览器。1.** { margin: 0; padding: 0;}*选择器选择的是每一个单一元素。很多程序员用上面的CSS将所有元素的margin和padding清零。虽然这是有效的,但最好还是别这么做,这会使得浏览器的负担很重。*选择器也可以用在孩子选择器中。#container * { border: 1px
2016-05-19 13:24:09
3251
翻译 理解CSS中的BFC(块级可视化上下文)[译]
开篇 一些元素,如float元素,如position为absolute,inline-block,table-cell或table-caption的元素,以及overflow属性不为visible的元素,它们将会建立一个新的块级格式化上下文。上述定义已经很详细的描述了块级格式化上下文(Block Formatting Context)是如何形成的,为了方便起见,文中均用BFC代替。现在,让我们
2015-08-11 13:07:12
1571
原创 shrink-to-fit(自适应宽度)
自适应宽度是指当未明确设定容器的宽度(或外边距设为auto)时,在特定的情况下容器的宽度会根据情况自行设定,而设定的结果往往并不是我们想要的。W3C规范中描述了几种shrink-to-fit的情况10.3.5 Floating, non-replaced elements 10.3.7 Absolutely positioned, non-replaced elements10.3.8 Ab
2015-07-28 14:16:14
5268
原创 Collapsing margins(外边距合并)
开篇 块元素的上边距或下边距有时会合并为一个margin,这种情况称之为外边距的合并,即collapsing margins.一个常见的css样式的bughtml&css:<!DOCTYPE html><html> <style type="text/css"> html, body{ width: 100%; heig
2015-07-27 00:00:44
1671
原创 一个例子让你明白原型对象和原型链
开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述。有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解。最近正在读《Javascript高级程序设计》,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明。我们经常会这么写 function Perso
2015-06-12 17:51:24
35614
8
原创 Javascript中的几种继承方式比较
开篇 从’严格’意义上说,javascript并不是一门真正的面向对象语言。这种说法原因一般都是觉得javascript作为一门弱类型语言与类似java或c#之类的强型语言的继承方式有很大的区别,因而默认它就是非主流的面向对象方式,甚至竟有很多书将其描述为’非完全面向对象’语言。其实个人觉得,什么方式并不重要,重要的是否具有面向对象的思想,说javascript不是面向对象语言的,往往都可能没有
2015-06-12 17:32:25
14266
1
原创 HTML5实现歌词同步
开篇HTML5的最强大之处莫过于对媒体文件的处理,如利用一个简单的vedio标签就可以实现视频播放。类似地,在HTML5中也有对应的处理音频文件的标签,那就是<audio>.标签在线Demoaudio标签实现一个audio标签非常简单,对应的html代码如下:<audio id="player" src="music/我在人民广场吃炸鸡.mp3" autoplay control
2015-06-12 14:27:00
20114
4
原创 Git使用总结!
情景1:如何多人协作?假若你已经clone了别人的仓库并且需要修改,最好的办法是建立自己的分支然后在合并,具体步骤如下:1.建立一个自己的分支git branch mybranch此时可以使用git branch查看当前的分支情况,如不 出意外,则显示一个master一个mybranchi分支,而你当前在master分支上。2.切换到新建的分支git
2014-11-25 20:40:46
30531
2
原创 Linux Mint 17下Sublime插件Emmet的安装和使用
众所周知,Sublime可以说是编辑器中的霸主,其代码样式也成为主流。更重要的是其具有丰富的Packages进行扩展,若经常写CSS,那么用Sublime在合适不过了,当然你首先还得安装能能够提高CSS编写效率的插件Emmet。首先打开Sulime,点击View->Show Console,在控制台输入以下脚本:Sublime Text 3:import urllib.reques
2014-11-15 22:08:18
2555
原创 面试准备之常见上机题目搜罗(三)
一、 输入一段英文文本,用程序统计出现频率最高和最低的两个单词; 仅大小写不同的单词算同一个单词; 如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。 返回的单词统一用小写字母返回 英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z) 单词之
2014-11-15 21:44:52
2052
原创 面试准备之常见上机题目搜罗(二)
1.数组比较题目: 比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数
2014-04-21 15:55:16
1248
2
原创 面试准备之常见上机题目搜罗(一)
1.从考试成绩中划出及格线 (1)及格线是10的倍数(2)保证至少有60%的学生及格(3)如果有所有的学生都高于60分,则及格线为60分。算法分析: 关键信息点为“保证至少有60%的学生及格”,可将分数线的概念转换为人数,即只需统计每个档次的人数,若60以上档次的人数就是全体人员则分数线为60,否则去寻找(由高分到低分)最先达到60%人数的档次。java实现如下:
2014-03-30 16:31:37
4457
6
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人